मैं इस धारणा के तहत था कि jQuery का on
इवेंट हैंडलर गतिशील रूप से बनाए गए तत्वों के लिए 'सुन' करने में सक्षम था और यह live
के व्यवहार को प्रतिस्थापित करना था। हालांकि, मैंने जो अनुभव किया है वह है कि on
का उपयोग क्लिक ईवेंट को कैप्चर नहीं कर रहा है जबकि live
का उपयोग कर रहा है!गतिशील रूप से जेनरेट किए गए मोडल पॉपअप में पंजीकरण नहीं कर रहे jQuery 'ऑन'
मेरी स्थिति की मुश्किल पहलू यह है कि मैं न केवल गतिशील सामग्री बनाने रहा हूँ, लेकिन मैं एक AJAX .get()
कॉल के माध्यम से यह कर रहा हूँ, और एक मॉडल .dialog()
jQueryUI पॉपअप में परिणामी HTML डालने है। मैं इस जो जो मैं अपने on
घटना लेखन के करीब पहुंच गया था पाया
$.get("getUserDataAjax.php", queryString, function(formToDisplay) {
$("#dialog").dialog({
autoOpen: true,
modal: true,
buttons...
}).html(formToDisplay);
});
$(".classThatExistsInFormToDisplay").on("click", function() {
alert("This doesn't get called");
});
on
के लिए दस्तावेज़ से::
यहाँ मैं क्या हासिल करने की कोशिश कर रहा था की एक सरलीकृत संस्करण ($(document).ready(...)
में लिपटे) है
$("p").on("click", function(){
alert($(this).text());
});
हालांकि, किसी कारण से, live
मैं उम्मीद के रूप में काम करेंगे - जबकि on
मुझे असफल रहा है।
इस के लिए सवाल नहीं है क्योंकि मैं ने पाया है कि on
सफल होगा (कब्जा क्लिक) अगर मैं इसेfunction(formToDisplay)
कॉलबैक अंदर घोषित "मैं यह कैसे काम कर सकते हैं"।
मेरा प्रश्न है:on
के साथ क्या गलत है कि यह एक मोडल पॉपअप के भीतर मेरे गतिशील रूप से बनाए गए तत्व नहीं ढूंढ रहा है? मेरा jQuery उदाहरण jquery-1.7.2 है। jQueryUI 1.8.21 है।
यहां दो जेएसफ़िडल्स हैं जो इस मुद्दे का अनुमान लगाते हैं। विभिन्न व्यवहार देखने के लिए दोनों उदाहरणों में "टेस्ट" शब्द पर क्लिक करें। कोड में एकमात्र अंतर on
को live
के लिए बदल रहा है।
जहां the clicklive
द्वारा कब्जा कर लिया गया है।
जहां the clickon
द्वारा कब्जा नहीं किया गया है (कुछ भी नहीं होने के लिए 'टेस्ट - मुझे क्लिक करें' पर क्लिक करें)। क्यों यह काम नहीं कर रहा है (लेकिन यदि आप कुछ बहुत चतुर है, साझा करने के लिए स्वतंत्र लग रहा है)
मैं मैं सिर्फ on
अनुचित तरीके से उपयोग किया जा सकता है या कुछ है कि इरादा नहीं था क्या करने के लिए यह पूछ एहसास लेकिन मैं जानना चाहता हूँ। आपके ज्ञान के लिए धन्यवाद!
अद्यतन/उत्तर/समाधान:
उपयोगकर्ता के अनुसार 'अनिर्धारित', अंतर यह है कि on
document
वस्तु जबकि live
करता है के ऊपर से सभी तरह से नहीं सौंपी है/है।
क्लाउडियो का उल्लेख है, वहाँ on
प्रलेखन संदर्भ डायनामिक रूप से तैयार तत्वों के कुछ भागों रहे हैं और कि क्या आप क्वेरी क्रम पर मौजूद हैं की जरूरत के $("")
भाग में शामिल हैं।
यहां मेरा नया समाधान है: कैप्चर पर क्लिक करें on
मेरे मोडल डायलॉग, जो कि रनटाइम पर ईवेंट बनने पर कोई सामग्री नहीं है, लेकिन जेनरेट होने वाली विशेष कक्षा के साथ मेरी सामग्री और तत्व ढूंढ पाएगा बाद में।
$("#dialog").on("click", ".classThatExistsInFormToDisplay", function() {
... //(success! Event captured)
});
बहुत बहुत धन्यवाद!
आकर्षक! मैंने पाया कि आपका सुझाव सफल हुआ। कितना भव्य! मैंने 'ऑन' ईवेंट को मॉडल डायलॉग से जोड़ा और फिर उस वर्ग पर प्रतिबंधित क्लिक जो मैं वास्तव में सावधान रहना चाहता हूं। हालांकि यह मेरी कक्षा (एक धारणा) पर कब्जा करने से अधिक ट्रिगर्स होगा, यह एक अच्छा समाधान की तरह लगता है।आपके उत्तर के लिए धन्यवाद! – veeTrain
@veerain आपका स्वागत है। – undefined
आप एक जीवन बचाओ हैं, महोदय! धन्यवाद। – Agent007