2010-10-18 38 views
6

मैं एक वेब पेज पर एक निर्दिष्ट फॉर्म के लिए सभी तरह के फॉर्म सबमिशन को रोकने की कोशिश कर रहा हूं। यह jQuery के साथ बहुत आसान लग रहा है: form.submit(function(e) {…}) और यदि मैं सबमिट बटन पर क्लिक करता हूं तो यह खूबसूरती से काम करता है।फ़ॉर्म को कैसे रोकें भरोसेमंद तरीके से सबमिट करें?

लेकिन वहाँ भी कुछ चुने हुए क्षेत्र है जो this.form.submit() करता है पर एक onChange संपत्ति है और यह इस कॉल मेरी श्रोता (क्रोमियम/फ़ायरफ़ॉक्स में) में गतिरोध उत्पन्न की तरह दिखता है: कोड में जाहिर है

<script type="text/javascript"> 
    function submitForm(e) { 
     window.alert('submitted'); 
     e.preventDefault(); 
     return false; 
    } 

    $(document).ready(function() { 
     $('#bar').submit(submitForm); 
    }); 
</script> 

<form id="bar"> 
    <select name="name" onChange="this.form.submit()"> 
     <option>Foo</option> 
     <option>Bar</option> 
    </select> 
    <br/> 
    <input type="submit"/> 
</form> 

मैं बस को बदल सकता है इसके बाद के संस्करण this.form.submit() मेरे सबमिट श्रोता के एक विशिष्ट संदर्भ के लिए। हालांकि मेरे असली ऐप में यह इतना आसान नहीं है इसलिए मैं ऐसे तरीके की तलाश में हूं जहां मुझे ऑन चेंज प्रॉपर्टी को संशोधित करने की आवश्यकता नहीं है।

यदि मैंने एक बेवकूफ गलती नहीं की है लेकिन वास्तव में ब्राउज़र व्यवहार की उम्मीद है, तो मैं वास्तव में खुश हूं अगर आप घटना प्रवाह की व्याख्या कर सकते हैं और यह ऊपर वर्णित लक्षणों का कारण क्यों बनता है।

+0

ओह, यह उल्लेख करना भूल गया कि "$ ('# bar') सबमिट करें()" ऑन चेंज भाग के लिए भी काम करता है। क्या जेएस ऑनएक्स विशेषताओं पर किसी प्रकार का 'प्रारंभिक बांध' करता है? –

उत्तर

10

form.submit() विधि को कॉल करने से submit ईवेंट ट्रिगर नहीं होता है, जैसे उदा। टेक्स्ट बॉक्स के value को सेट करना change ईवेंट ट्रिगर नहीं करता है। बजाय jQuery के माध्यम से submit घटना को गति प्रदान करने का प्रयास करें:

<form id="bar"> 
    <select name="name" onChange="$('#bar').submit();"> 
     <option>Foo</option> 
     <option>Bar</option> 
    </select> 
    <br/> 
    <input type="submit"/> 
</form> 

documentation के अनुसार, प्रपत्र पर डिफ़ॉल्ट submit कार्रवाई सक्रिय होगा तथा प्रपत्र प्रस्तुत किया जाएगा।

+1

यहां बदले जाने के लिए एक ड्रॉप-इन प्रतिस्थापन है जिसे फ़ॉर्म आईडी जानने की आवश्यकता नहीं है: 'onchange = "$ (this.form) .submit()" ' – Tobia

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