जेकरी .on () सबमिट इवेंट


98

मुझे एक समस्या है .on()। मेरे पास कई फॉर्म-एलिमेंट्स (फॉर्म के साथ class="remember") हैं, मैं form.rememberAJAX का उपयोग करके एक और जोड़ देता हूं । इसलिए, मैं चाहता हूं कि इसे कुछ इस तरह प्रस्तुत करें:

$('form.remember').on('submit',function(){...}) 

लेकिन AJAX के साथ जोड़ा गया रूप इसके साथ काम नहीं करता है।

समस्या कहाँ हे? यह एक बग है?


9
कोशिश करें$(document).on('submit','form.remember',function(){...})
सर्जियो

1
@Sergio documentनिकटतम स्थिर माता-पिता के साथ प्रतिस्थापित करता है।
मार्क बैजेंस

जवाबों:


217

आपको घटना को दस्तावेज़ स्तर पर सौंपने की आवश्यकता है

$(document).on('submit','form.remember',function(){
   // code
});

$('form.remember').on('submit'उसी तरह काम करें $('form.remember').submit(लेकिन जब आप उपयोग $(document).on('submit','form.remember'करेंगे तो बाद में जोड़े गए DOM के लिए भी काम करेंगे।


24
यह भी ध्यान में रखें कि $(document).onप्रदर्शन की तुलना में बहुत कम है $('form.remember').on('submit'। अब इसे दस्तावेज़ में सभी प्रस्तुत घटनाओं के लिए सुनना है । on documentयदि संभव हो तो स्कोप को सुनने की अपेक्षा थोड़ा सीमित करना ज्यादा बेहतर है
Liam

7
$ ('बॉडी')। ('सबमिट', 'फॉर्म.मूम्बर', फंक्शन () {// कोड}) पर; मेरी समस्या हल कर दी
ओलोटिन टेमीटोप

भले ही @Liam सही है, $ (दस्तावेज़) .on अभी भी अजाक्स प्रदान किए गए तत्वों पर CRUD संचालन के लिए उपयोगी है।
नोरीले क्रूज़

38

मुझे उसी सहानुभूति के साथ समस्या थी। मेरे मामले में, यह पता चला कि मेरा सबमिट फ़ंक्शन "रिटर्न" स्टेटमेंट याद कर रहा था।

उदाहरण के लिए:

 $("#id_form").on("submit", function(){
   //Code: Action (like ajax...)
   return false;
 })

2
ध्यान दें कि return false;फॉर्म जमा नहीं करेंगे। फार्म का उपयोग प्रस्तुत करने के लिए return true;
काई नोएक

0

यहां समस्या यह है कि "ऑन" उन सभी तत्वों पर लागू होता है जो समय पर मौजूद हैं। जब आप एक तत्व गतिशील रूप से बनाते हैं, तो आपको फिर से चलाने की आवश्यकता होती है:

$('form').on('submit',doFormStuff);

createNewForm();

// re-attach to all forms
$('form').off('submit').on('submit',doFormStuff);

चूंकि रूपों में आमतौर पर नाम या आईडी होते हैं, इसलिए आप नए रूप में भी संलग्न कर सकते हैं। यदि मैं बहुत अधिक गतिशील सामान बना रहा हूं, तो मैं एक सेटअप या बाइंड फ़ंक्शन शामिल करूंगा:

function bindItems(){
    $('form').off('submit').on('submit',doFormStuff); 
    $('button').off('click').on('click',doButtonStuff);
}   

तो फिर जब भी आप कुछ बनाते हैं (आमतौर पर मेरे मामले में बटन), मैं सिर्फ पेज पर सब कुछ अपडेट करने के लिए बाइंडिम्स कहता हूं।

createNewButton();
bindItems();

मुझे 'बॉडी' या डॉक्यूमेंट एलिमेंट्स का उपयोग करना पसंद नहीं है क्योंकि टैब और मॉडल्स के साथ वे घूमने लगते हैं और वे काम करते हैं जिनकी आपको उम्मीद नहीं है। मैं हमेशा यथासंभव विशिष्ट होने की कोशिश करता हूं जब तक कि यह एक साधारण 1 पृष्ठ परियोजना नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.