कई उपयोगी उत्तर हैं, लेकिन सभी नवीनतम विकल्पों को कवर करने के लिए कोई भी प्रतीत नहीं होता है । उस अंत तक मेरे सभी उदाहरण मेल खाने वाले label
तत्वों की उपस्थिति के लिए भी पूरा करते हैं और आपको गतिशील रूप से चेकबॉक्स जोड़ने और साइड-पैनल (रीडायरेक्ट करके console.log
) में परिणाम देखने की अनुमति देते हैं ।
के लिए सुनकर click
पर घटनाओं checkboxes
है नहीं एक अच्छा विचार है कि कुंजीपटल टॉगल के लिए या बनाया है, जहां एक मिलान परिवर्तन के लिए अनुमति नहीं दी जाएगी के रूप में label
तत्व क्लिक हुआ था। हमेशा change
घटना के लिए सुनो ।
:checkbox
इसके बजाय jQuery के छद्म चयनकर्ता का उपयोग करें input[type=checkbox]
। :checkbox
छोटा और अधिक पठनीय है।
चेकबॉक्स चेक किया गया है या नहीं, इसका परीक्षण करने के is()
लिए jQuery के :checked
छद्म चयनकर्ता के साथ प्रयोग करें । यह सभी ब्राउज़रों में काम करने की गारंटी है।
मौजूदा तत्वों से जुड़ी बुनियादी घटना हैंडलर:
$('#myform :checkbox').change(function () {
if ($(this).is(':checked')) {
console.log($(this).val() + ' is now checked');
} else {
console.log($(this).val() + ' is now unchecked');
}
});
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/2/
टिप्पणियाँ:
:checkbox
चयनकर्ता का उपयोग करता है , जो उपयोग करने के लिए बेहतर हैinput[type=checkbox]
- यह केवल उन मिलान तत्वों से जुड़ता है जो उस समय मौजूद थे जब ईवेंट पंजीकृत था।
पूर्वज तत्व से जुड़े प्रतिनिधि हैंडलर:
प्रत्यायोजित ईवेंट हैंडलर उन स्थितियों के लिए डिज़ाइन किए गए हैं जहां तत्व अभी तक मौजूद नहीं हो सकते हैं (गतिशील रूप से लोड या निर्मित) और बहुत उपयोगी है। वे पूर्वज तत्व (इसलिए शब्द) को जिम्मेदारी सौंपते हैं ।
$('#myform').on('change', ':checkbox', function () {
if ($(this).is(':checked')) {
console.log($(this).val() + ' is now checked');
} else {
console.log($(this).val() + ' is now unchecked');
}
});
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/4/
टिप्पणियाँ:
- यह
change
एक गैर-बदलते पूर्वज तत्व ( इस मामले में ) को बुलबुले के लिए घटनाओं (इस मामले में ) को सुनकर काम करता है#myform
।
- यह तब jQuery के चयनकर्ता (
':checkbox'
इस मामले में) को केवल बबल चेन के तत्वों पर लागू होता है ।
- यह तो ईवेंट हैंडलर फ़ंक्शन को उन मेल खाने वाले तत्वों पर लागू करता है जो ईवेंट का कारण बनते हैं।
document
प्रतिनिधि इवेंट हैंडलर को जोड़ने के लिए डिफ़ॉल्ट के रूप में उपयोग करें , अगर कुछ और करीब / सुविधाजनक नहीं है।
body
प्रत्यायोजित घटनाओं को संलग्न करने के लिए उपयोग न करें क्योंकि इसमें बग (स्टाइल के साथ करने के लिए) है जो माउस घटनाओं को प्राप्त करने से रोक सकता है।
प्रत्यायोजित संचालकों का उत्थान यह है कि मिलान करने वाले तत्वों को केवल घटना के समय ही मौजूद होना चाहिए , न कि जब घटना के हैंडलर को पंजीकृत किया गया हो। यह घटनाओं को उत्पन्न करने के लिए गतिशील रूप से जोड़ी गई सामग्री की अनुमति देता है।
प्रश्न: क्या यह धीमा है?
ए: जब तक उपयोगकर्ता-इंटरैक्शन गति पर घटनाएं होती हैं, तब तक आपको एक प्रतिनिधि ईवेंट हैंडलर और एक सीधे जुड़े हैंडलर के बीच गति में नगण्य अंतर के बारे में चिंता करने की आवश्यकता नहीं है । प्रतिनिधिमंडल के लाभ किसी भी मामूली नकारात्मक परिणाम से बहुत आगे निकल जाते हैं। प्रत्यायोजित ईवेंट हैंडलर वास्तव में रजिस्टर करने के लिए तेज़ होते हैं क्योंकि वे आम तौर पर एक एकल मिलान तत्व से जुड़ते हैं।
prop('checked', true)
आग क्यों नहीं लगाताchange
घटना को ?
यह वास्तव में डिजाइन द्वारा है। यदि यह घटना को आग लगा देता है तो आप आसानी से अंतहीन अपडेट की स्थिति में आ जाएंगे। इसके बजाय, जाँच की गई संपत्ति को बदलने के बाद, उसी तत्व का उपयोग करके एक परिवर्तन घटना भेजें trigger
(नहीं)triggerHandler
):
बिना trigger
किसी घटना के होता है
$cb.prop('checked', !$cb.prop('checked'));
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/
साथ जैसे trigger
सामान्य परिवर्तन घटना पकड़ा है
$cb.prop('checked', !$cb.prop('checked')).trigger('change');
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/
टिप्पणियाँ:
triggerHandler
एक उपयोगकर्ता द्वारा सुझाए गए अनुसार उपयोग न करें, क्योंकि यह एक प्रतिनिधि इवेंट हैंडलर को बबल इवेंट नहीं करेगा ।
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/8/
यद्यपि यह एक ईवेंट हैंडलर के लिए काम करेगा जो सीधे तत्व से जुड़ा है:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/9/
.TriggerHandler () DOM पदानुक्रम को बुलबुला न करें; यदि उन्हें सीधे लक्ष्य तत्व द्वारा नियंत्रित नहीं किया जाता है, तो वे कुछ भी नहीं करते हैं।
संदर्भ: http://api.jquery.com/triggerhandler/
यदि किसी के पास अतिरिक्त विशेषताएं हैं, तो उन्हें लगता है कि यह इसके द्वारा कवर नहीं किया गया है, कृपया सुझाव जोड़ दें ।
this
चेकबॉक्स के DOM तत्व के लिए पहले से ही सेट है इसलिएthis.checked
पर्याप्त है। जब तक आप इसमें हेरफेर नहीं करेंगे, आपको इसके लिए एक और jQuery ऑब्जेक्ट बनाने की आवश्यकता नहीं होगी।