.प्रॉप ('चेक किया हुआ', गलत) या .आर्मोवेट ('चेक'))?


115

प्रोप विधि की शुरुआत के साथ, अब मुझे चेकबॉक्स को अनचेक करने के स्वीकृत तरीके को जानना होगा। क्या यह:

$('input').filter(':checkbox').removeAttr('checked');

या

$('input').filter(':checkbox').prop('checked',false);

4
क्या आपने जॉन रेजिग की पोस्ट पढ़ी है? ejohn.org/blog/jquery-16-and-attr
Jared Farrish

जवाबों:


130

jQuery 3

JQuery 3 के अनुसार, अब और संबंधित संपत्ति सेट नहींremoveAttr करता है :false

JQuery 3.0 करने से पहले, का उपयोग करते हुए .removeAttr()एक बूलियन विशेषता पर जैसे checked, selected, या readonlyभी करने के लिए इसी नामित गुण सेट हैं false। यह व्यवहार इंटरनेट एक्सप्लोरर के प्राचीन संस्करणों के लिए आवश्यक था लेकिन आधुनिक ब्राउज़रों के लिए सही नहीं है क्योंकि विशेषता प्रारंभिक मूल्य का प्रतिनिधित्व करती है और संपत्ति वर्तमान (गतिशील) मूल्य का प्रतिनिधित्व करती है।

यह लगभग हमेशा .removeAttr( "checked" )एक DOM तत्व पर उपयोग करने के लिए एक गलती है । यह केवल उसी समय उपयोगी हो सकता है जब DOM बाद में HTML स्ट्रिंग में वापस धारावाहिक होने जा रहा हो। अन्य सभी मामलों में, .prop( "checked", false )इसके बजाय उपयोग किया जाना चाहिए।

बदलाव का

इसलिए .prop('checked',false)इस संस्करण का उपयोग करते समय केवल सही तरीका है।


मूल उत्तर (2011 से):

उन विशेषताओं के लिए जिनमें अंतर्निहित बूलियन गुण हैं (जिनमें checkedसे एक है), removeAttrस्वचालित रूप से अंतर्निहित संपत्ति को सेट करता है false। (ध्यान दें कि यह jQuery 1.6.1 में जोड़ा गया "पश्च" संगतता के बीच है।)

तो, या तो काम करेगा ... लेकिन आपने जो दूसरा उदाहरण दिया (उपयोग करना prop) दोनों में से अधिक सही है। यदि आपका लक्ष्य चेकबॉक्स को अनचेक करना है, तो आप वास्तव में संपत्ति को प्रभावित करना चाहते हैं , विशेषता को नहीं, और ऐसा करने के लिए कुछ भी करने की आवश्यकता नहीं removeAttrहै।


36
@ टांडू: आप कर सकते हैं , लेकिन आपको नहीं करना चाहिए। डॉक्स से: " नोट:removeProp() चेक किए गए, अक्षम या चयनित जैसे देशी गुणों को हटाने के लिए [ ] का उपयोग न करें । यह संपत्ति को पूरी तरह से हटा देगा और एक बार हटाए जाने के बाद, फिर से तत्व में नहीं जोड़ा जा सकता है। .prop()इन गुणों को झूठे में सेट करने के लिए उपयोग करें। बजाय।" removePropवास्तव में केवल कस्टम गुणों के साथ उपयोग के लिए अभिप्रेत है।
जॉन फ्लैटनेस 20

17

उपयोग checked: चेकबॉक्स की सच्ची, झूठी संपत्ति।

jQuery:

if($('input[type=checkbox]').is(':checked')) {
    $(this).prop('checked',true);
} else {
    $(this).prop('checked',false);
}

हम एक लाइनर, $ (यह) .prop ('चेक किया हुआ', $ ('इनपुट [प्रकार = चेकबॉक्स]') का उपयोग करके समाप्त कर सकते हैं;) (': चेक किया हुआ');
यूसुफ हसन

8

मैं दोनों का उपयोग करने की सलाह देता हूं, प्रोप और एट्री क्योंकि मुझे क्रोम के साथ समस्या थी और मैंने इसे दोनों कार्यों का उपयोग करके हल किया।

if ($(':checkbox').is(':checked')){
    $(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
    $(':checkbox').prop('checked', false).removeAttr('checked');
}

हाँ, क्रोम के लिए, का उपयोग करें: $("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
रॉड

मैं इनपुट रेडियो और चेकबॉक्स को बदलने के लिए कस्टम घटक (CSS + JS) का उपयोग करता हूं। यह एकमात्र तरीका है जो मेरे लिए काम करता है। धन्यवाद!
सिल्वियो डेलगाडो

3

एक ही काम करने के लिए एक अन्य विकल्प प्रकार = चेकबॉक्स विशेषता पर फ़िल्टर करना है :

$('input[type="checkbox"]').removeAttr('checked');

या

$('input[type="checkbox"]').prop('checked' , false);

विशेष परिस्थितियों में विशेषताओं और गुणों के बीच अंतर महत्वपूर्ण हो सकता है। JQuery 1.6 से पहले , .attr () विधि कभी-कभी कुछ विशेषताओं को पुनर्प्राप्त करते समय संपत्ति मूल्यों को ध्यान में रखती है, जिससे असंगत व्यवहार हो सकता है। JQuery 1.6 के रूप में, .prop () विधि संपत्ति के मूल्यों को स्पष्ट रूप से पुनर्प्राप्त करने का एक तरीका प्रदान करती है, जबकि .attr () विशेषताओं को पुनः प्राप्त करती है।

आगे जानिए ...


2
सवाल यह था कि "इनमें से कौन अधिक सही है"? नहीं "क्या ऐसा करने के कोई अन्य तरीके हैं?"। आपको इस प्रश्न का उत्तर देने का प्रयास नहीं किया गया है
एंड्रयू स्टब्स को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.