2010-07-21 24 views
32
<form method="post" action="load_statements.php?action=load" id="loadForm" 
          enctype="multipart/form-data"> 

जो मेरा फॉर्म है, जो मुझे ठीक लग रहा है।

<input type="button" name="submit" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" /> 

यहां समारोह में यह कहता है: उस रूप में, मैं इस बटन डाल दिया।

function confirmSubmit() { 
    // get the number of statements that are matched 
    $.post(
     "load_statements.php?action=checkForReplace", 
     { 
      statementType : $("#statementType").val(), 
      year : $("#year").val() 
     }, 
     function(data) { 
      if(data['alreadyExists']) { 
       if(confirm("Statements already exist for " + $("#statementType").html() + " " + $("#year").val() + 
        ". Are you sure you want to load more statements with these settings? (Note: All duplicate files will be replaced)" 
       )) { 
        $("#loadForm").submit(); 
       } 
      } else { 
       $("#loadForm").submit(); 
      } 
     }, "json" 
    ); 
} 

यह $("#loadForm").submit(); कॉल करता है और जैसा कि आप देख सकते हैं, लेकिन पर्चे को जमा नहीं कर रहा है (यानी पृष्ठ ताज़ा नहीं है)। ऐसा क्यों है?

धन्यवाद!

+0

आप एक ब्रेकपाइंट मारा अगर आप इसे डाल दिया करो जमा कॉल पर? – mackenir

+0

हाँ, यह चलता है, लेकिन वास्तव में किसी कारण से फ़ॉर्म सबमिट नहीं करता है। – Garrett

उत्तर

17

http://api.jquery.com/submit/

jQuery प्रस्तुत का उपयोग कर पृष्ठ से नेविगेट कर सकते हैं() घटना होने की जब आप प्रपत्र सबमिट एक घटना श्रोता कहते हैं। तो आपका कोड सबमिट घटना में अनिवार्य रूप से कुछ भी बाध्यकारी नहीं है। यदि आप उस फॉर्म को सबमिट करना चाहते हैं, तो आप पुराने स्कूल जावास्क्रिप्ट (document.formName.submit()) का उपयोग करें।

संपादित करें:

मैं अपने मूल जवाब बताते जहाँ मैं बंद किया गया था (के रूप में कम से कम दो लोग पहले से ही के लिए मुझे downvoted है) बरकरार जा रहा हूँ। मैं क्या कहना चाहता हूं, यह है कि यदि आपके पास ऐसा कोई कार्य है, तो यह भ्रमित है कि आप अजाक्स भाग में मान क्यों पोस्ट करेंगे और फिर फ़ॉर्म सबमिट करने के लिए jQuery का उपयोग करें। इस मामले में, मैं 'बटन पर क्लिक करने के लिए घटना के लिए बाध्य होगा, और फिर सच वापसी अगर आप इसे वापस करना चाहते हैं, अन्यथा, झूठे वापसी, इसलिए

$('#submit').click(function() { 
    // ajax logic to test for what you want 
    if (ajaxtrue) { return confirm(whatever); } else { return true;} 
}); 

की तरह इस समारोह सच देता है, तो फिर यह मायने रखता है सबमिट बटन के सफल क्लिक के रूप में और सामान्य ब्राउज़र व्यवहार होता है। फिर आपने एक ईवेंट हैंडलर के रूप में मार्कअप से तर्क को भी अलग कर दिया है।

अधिक समझदारी करें? <div style="display:none"><input id="alternateSubmit" type="submit" /></div>

:

+4

यदि आप कोई फ़ंक्शन पास करते हैं तो Thats। अगर आप सबमिट() जमा करते हैं, तो फॉर्म पर डिफॉल्ट सबमिट एक्शन निकाल दिया जाएगा, इसलिए फॉर्म जमा किया जाएगा। – Yisroel

+0

... माना जाता है ... लेकिन किसी कारण से, नहीं = ( – Garrett

+1

मैंने जवाब देने के लिए उत्तर अपडेट किया है कि मेरा क्या मतलब था। मैं बहुत स्पष्ट नहीं था, यह मेरा बुरा था। – NateDSaint

-1

ऐसा लगता है कि आपके पास कॉलबैक में सबमिट हो रहा है जो केवल आपके ऑनक्लिक हैंडलर में एजेक्स पोस्ट के बाद चलता है।

दूसरे शब्दों में, जब आप सबमिट करते हैं, तो ब्राउजर को पहले बाहर जाना होगा और चेकफॉररप्लेस एक्शन दबाएं।

+0

हाँ, जो यह करता है, और फिर '$ (" # loadForm ") हिट करता है। सबमिट करें(); 'जो कुछ भी नहीं करता है। – Garrett

-3

इसके अजाक्स कॉल, आपको एजेक्स का उपयोग करके पहले से ही संसाधित करते समय अपना फॉर्म जमा करने की आवश्यकता क्यों है। आप

window.location.href = "/somewhere/else"; 
+0

उपयोगकर्ता को सही पुष्टि() कथन देने के लिए मुझे इससे पहले भाग लेने की आवश्यकता है। – Garrett

4

मैं एक अदृश्य फार्म के लिए सबमिट बटन, और बदले प्रस्तुत() फ़ंक्शन को बुलाने की, मैं सबमिट बटन पर क्लिक() फ़ंक्शन को कॉल =)

बटन जोड़ा फॉर्म सबमिशन के चारों ओर पाने का पागल तरीका: $("#alternateSubmit").click();

+0

मैंने अपना उत्तर अपडेट किया है जिसमें एक नया पीओ शामिल है ssible समाधान, जिसे मैंने सफलतापूर्वक परीक्षण किया है, यदि आप इसे चाहते हैं तो मैं इसके लिए कोड प्रदान कर सकता हूं। – NateDSaint

70

किसी अन्य चीज़ के बटन को "सबमिट" नाम बदलें। इससे समस्या आती है।पर dennisjq के देखें जवाब: http://forum.jquery.com/topic/submiting-a-form-programmatically-not-working

) jQuery प्रस्तुत देखें (प्रलेखन:

फ़ॉर्म और अपने बच्चे तत्वों इनपुट नाम या आईडी उपयोग नहीं करना चाहिए कि इस तरह के प्रस्तुत के रूप में एक फार्म के गुणों, साथ संघर्ष , लंबाई, या विधि। नाम विवाद भ्रमित विफलताओं का कारण बन सकता है। नियमों की पूरी सूची के लिए और इन समस्याओं के लिए अपना मार्कअप जांचने के लिए, DOMLint देखें।

+0

यह सही जवाब प्रतीत होता है, दूसरों को नहीं। कम से कम यह मेरे मामले में सही समस्या थी और सवाल में समस्या प्रतीत होती है। अन्य उत्तरों गलत लगते हैं। – arunkumar

+0

मैंने उसी मामले का परीक्षण किया और पाया कि 'id' या' name' विशेषताओं में परिवर्तन अभी भी एक ही त्रुटि उत्पन्न करता है। –

+7

यह मेरे लिए जवाब था। पहले –

19

मैं $("form")[0].submit()

यहाँ

$("form") सम्बंधित सूचकांक हम प्रपत्र तत्व के लिए डोम वस्तु हो और कि डोम तत्व के भीतर submit() समारोह निष्पादित कर सकते हैं पर पहुंचकर डोम तत्वों की एक सरणी देता है तो का उपयोग करें।

वापस ड्रा यदि आप एक html पृष्ठ के भीतर कई प्रपत्र तत्व आप मैं एक ऐसी ही समस्या थी "फार्म" रों

+0

मेरे लिए समस्या तय की गई, +1 – Angad

+1

@garrett '$ (" # loadForm ") [0] .submit(); 'मेरे लिए काम करता है। ऐसा लगता है कि 'submit()' '$ (" # loadForm ") 'चयनकर्ता द्वारा लौटाए गए तत्वों की सरणी पर काम नहीं करता है। – hongster

13

का सही क्रम के बारे में एक विचार करना होगा है, यह पता लगाने के लिए कुछ समय लिया। jQuery के .submit() फ़ंक्शन को फ़ॉर्म सबमिट करना चाहिए यदि आप इसे हैंडलर पास नहीं करते हैं, लेकिन इसका कारण यह नहीं है क्योंकि आपका सबमिट बटन "सबमिट" नाम दिया गया है और फॉर्म के सबमिट फ़ंक्शन को ओवरराइड कर रहा है।

यानी jQuery ने DOM ऑब्जेक्ट के <form>.submit() फ़ंक्शन को कॉल किया है, लेकिन किसी फॉर्म के भीतर सभी इनपुट <form>.<inputname> पर कॉल करके भी पहुंच सकते हैं। इसलिए यदि आपके इनपुट में से एक को 'सबमिट' नाम दिया गया है तो यह <form>.submit() फ़ंक्शन को <form>.submit के साथ ओवरराइड करता है - इनपुट डोम तत्व होने के नाते .... अगर यह समझ में आता है? तो जब jQuery <form>.submit() पर कॉल करता है तो यह काम नहीं करता है क्योंकि सबमिट अब कोई फ़ंक्शन नहीं है। तो, यदि आप अपने बटन का नाम बदलते हैं तो इसे काम करना चाहिए।

यह सुनिश्चित नहीं है कि कंसोल एक त्रुटि क्यों नहीं लॉग करता है, शायद jQuery पहले जांच कर रहा है कि सबमिट फ़ंक्शन मौजूद है और यदि फ़ंक्शन मौजूद नहीं है तो अनुरोध को अनदेखा कर रहा है।

+0

क्षमा करें, मेरी पोस्ट अपेक्षित के रूप में बाहर नहीं निकली। दूसरा अनुच्छेद पढ़ना चाहिए: i.e. jQuery डीओएम ऑब्जेक्ट के form.submit() फ़ंक्शन को कॉल करता है, लेकिन फ़ॉर्म के सभी इनपुट को form.inputname पर कॉल करके भी एक्सेस किया जा सकता है। इसलिए यदि आपके इनपुट में से एक को 'सबमिट' नाम दिया गया है तो form.submit() फ़ंक्शन form.submit के साथ ओवरराइड करता है - इनपुट डोम तत्व होने के नाते .... अगर यह समझ में आता है? तो जब jQuery form.submit() को कॉल करता है तो यह काम नहीं करता है क्योंकि सबमिट अब कोई फ़ंक्शन नहीं है। – Donovan

+0

आज मुझे एक ही समस्या का सामना करना पड़ रहा है और आपके समाधान ने मेरे पक्ष से +10 के लिए काम किया है। धन्यवाद। –

2

मिटा विशेषता "नाम" आपकी सबमिट बटन में:

<input type="button" name="submit" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" /> 

इस तरह होना चाहिए:

यह आपके कोड है

<input type="button" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" /> 
+0

यह भी काम करता है अगर आप अपना नाम "सबमिट" से कुछ और बदलते हैं –

संबंधित मुद्दे