चेकबॉक्स क्लिक पर चेक नहीं किया गया है या नहीं, इसकी जाँच करें


86

मैं जांचना चाहता हूं कि क्या कोई चेकबॉक्स अनियंत्रित हो गया है, जब कोई उपयोगकर्ता उस पर क्लिक करता है। इसका कारण यह है क्योंकि जब कोई उपयोगकर्ता चेकबॉक्स अनचेक करता है तो मैं एक सत्यापन करना चाहता हूं। क्योंकि कम से कम एक चेकबॉक्स को जांचना होगा। इसलिए यदि वह अंतिम को अनचेक करता है, तो यह स्वचालित रूप से फिर से खुद को जांचता है।

JQuery के साथ मैं आसानी से पता लगा सकता हूँ कि यह जाँच की गई है या नहीं:

$('#check1').click(function() {
    if($(this).is(':checked'))
        alert('checked');
    else
        alert('unchecked');
});

लेकिन मैं वास्तव में केवल एक स्टेटमेंट रखना चाहता हूं जो चेक करता है कि क्या चेकबॉक्स अभी अनियंत्रित हुआ है।

इसलिए मैंने सोचा कि मैं निम्नलिखित कोड के साथ ऐसा कर सकता हूं:

$('#check2').click(function() {
    if($(this).not(':checked'))
        alert('unchecked');
    else
        alert('checked');
});

लेकिन यह हमेशा 'अनियंत्रित' संदेश दिखाएगा। नहीं वास्तव में मैं क्या उम्मीद कर रहा था ...

डेमो: http://jsfiddle.net/tVM5H/

तो आखिरकार मुझे कुछ चाहिए:

$('#check2').click(function() {
    if($(this).not(':checked')) {
        // Got unchecked, so something!!!
    }
});

लेकिन स्पष्ट रूप से यह काम नहीं करता है। मैं इसके बजाय पहले उदाहरण का उपयोग नहीं करना चाहता, क्योंकि तब मुझे एक अनावश्यक 'और' बयान देना होगा, जब मुझे केवल 'एक' कथन की आवश्यकता होगी।

तो पहली बात, क्या यह एक jQuery बग है? मेरे कारण यह अप्रत्याशित व्यवहार है। और दूसरा, किसी को भी एक अच्छा विकल्प के लिए किसी भी आईडी?

जवाबों:



50

पहले से पोस्ट किया गया जवाब काम करेगा। यदि आप jQuery का उपयोग करना चाहते हैं: तो आप ऐसा नहीं कर सकते:

if ($(this).is(':not(:checked)'))

या

if ($(this).attr('checked') == false)

इस जवाब में पहला उदाहरण सभी विकल्पों में से सबसे आसान पढ़ने के लिए लगता है, इसलिए मैं उसके लिए वोट करता हूं।
टॉबी 1 केनोबी

5

jQuery की जाँच के लिए जाँच करने के लिए? वास्तव में?

if(!this.checked) {

रेजर का काम करने के लिए बाज़ूका का उपयोग न करें।


4
यदि तत्व को खोजने के लिए jQuery का उपयोग किया जाता है, तो इसे पढ़ना चाहिए$(this)[0].checked
क्रिस

@HoldOffHunger यह मूल इनपुट तत्व का हिस्सा है: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/… यदि आप jQuery का उपयोग कर रहे हैं तो क्रिस ने आपके ऊपर टिप्पणी में सही वाक्यविन्यास किया है।
TheZ

@ THEZ: अच्छा! हां, आप सही हैं, क्रिस का जवाब अच्छा है। सुझाव: क्रेडिट के साथ उत्तर देने के लिए इसे जोड़ें? ओपी और शीर्ष दोनों उत्तर $ (चयनकर्ता) .is ('...') की ओर झुकाव करते हैं, जो एक शुद्ध jQuery समाधान है। केवल .checkedउनका उपयोग करना जहां उनके पास .is('checked')काम नहीं होगा।
होल्डऑफहंगर



2

इस प्रश्न के कुछ उत्तर देखें - मुझे लगता है कि यह आपके लिए लागू हो सकता है:

कैसे एक तत्व के डिफ़ॉल्ट व्यवहार के बाद क्लिक समारोह चलाने के लिए

मुझे लगता है कि आप onclickफ़ंक्शन के ब्राउज़र कार्यान्वयन में एक असंगतता में चल रहे हैं । कुछ को चेक बॉक्स को चालू करने से पहले टॉगल करने के लिए चुनते हैं और कुछ के बाद।


यह वास्तव में बहुत महत्वपूर्ण है।
theZ

और यही कारण है कि jQuery के लिए जाँच करने के लिए जाँच करें। वास्तव में। ;)
जोब्रेकहॉस

1

उत्तर पहले से ही पोस्ट किया गया है। लेकिन हम इस तरह से भी jquery का उपयोग कर सकते हैं

डेमो

$(function(){
    $('#check1').click(function() {
        if($('#check1').attr('checked'))
            alert('checked');
        else
            alert('unchecked');
    });

    $('#check2').click(function() {
        if(!$('#check2').attr('checked'))
            alert('unchecked');
        else
            alert('checked');
    });
});

0

इसे इस तरह करो

if (typeof $(this).attr("checked") == "undefined" )

// To check if checkbox is checked
if( $(this).attr("checked")=="checked")

यह सिर्फ हो सकता है this.checked। पहली पंक्ति की आवश्यकता नहीं है typeof(यह कभी नहीं बढ़ेगी ReferencError)। आपको prop()इसके बजाय भी उपयोग करना चाहिए attr(), जो एक बूलियन को लौटाएगा, जिससे आपका दूसरा भी बेमानी हो जाएगा।
एलेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.