कई उपयोगी उत्तर हैं, लेकिन सभी नवीनतम विकल्पों को कवर करने के लिए कोई भी प्रतीत नहीं होता है । उस अंत तक मेरे सभी उदाहरण मेल खाने वाले 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 ऑब्जेक्ट बनाने की आवश्यकता नहीं होगी।