jQuery, चेकबॉक्स और .is (": चेक किया गया")


88

जब मैं किसी फ़ंक्शन को चेकबॉक्स तत्व की तरह बांधता हूं:

$("#myCheckbox").click( function() {
    alert($(this).is(":checked"));
});

चेकबॉक्स घटना को ट्रिगर करने से पहले अपनी जाँच की गई विशेषता को बदलता है, यह सामान्य व्यवहार है, और एक उलटा परिणाम देता है।

हालाँकि, जब मैं करता हूँ:

$("#myCheckbox").click();

ईवेंट ट्रिगर होने के बाद चेकबॉक्स ने इसे चेक की गई विशेषता को बदल दिया ।

मेरा सवाल है, क्या jQuery से क्लिक इवेंट को ट्रिगर करने का एक तरीका है जैसे एक सामान्य क्लिक (पहला परिदृश्य) करेगा?

पुनश्च: मैंने पहले ही साथ कोशिश की है trigger('click');


5
मैंने अभी इसे सत्यापित किया है। आप पूरी तरह से सही हैं। ऐसा लगता है कि यह एक बग हो सकता है। मैं इसे jQuery के साथ एक बग के रूप में उठाता हूँ और देखता हूँ कि dev.jquery.com
cletus

1
'परिवर्तन' घटना के बारे में क्या?
ZippyV

@ क्लेटस वास्तव में, यह एक जेकरी 1.4.2 बग है। 1.3.2 ठीक काम करता है।
बेन

: मैं दोनों 1.4.2 और 1.3.2 में समान व्यवहार दिखाई दे रही है jsfiddle.net/HCUNn
निक Craver

@ अभी भी यह सामान्य माउस क्लिक के विपरीत है। मैं ईमानदारी से नहीं जानता कि 1.3.2 मेरे लिए क्यों काम करता है और 1.4.2 नहीं करता है, लेकिन फिर भी, इसे बदलने की जरूरत है।
बेन

जवाबों:


98
$('#myCheckbox').change(function () {
    if ($(this).prop("checked")) {
        // checked
        return;
    }
    // not checked
});

नोट: jquery के पुराने संस्करणों में इसका उपयोग करना ठीक था attrअब इसका उपयोग करने का सुझाव दिया गया हैprop राज्य को पढ़ने के करने गया है।


1
मैंने कोशिश की है कि, "$ (# myCheckbox) .click ()" बॉक्स को अनचेक / चेक करता है लेकिन परिवर्तन फ़ंक्शन कभी ट्रिगर नहीं होता है। मैंने कॉल क्लिक () और यहां तक ​​कि 'परिवर्तन' फ़ंक्शन को 'लाइव' में सेट करने के बजाय 'चेक' किए गए विशेषता को बदलने की भी कोशिश की है।
बेन

@ बान - आपको इसे चलाने के लिए इसे अलग तरीके से ट्रिगर करना होगा, ट्रिगर स्टेटमेंट के लिए मेरा जवाब देखें।
निक Craver

@ धन्यवाद, मैं tcurdt उत्तर स्वीकार करूंगा क्योंकि वह समाधान के साथ बाहर आने वाला पहला व्यक्ति था। मूर्खतापूर्ण मुझे 'परिवर्तन' विधि शुरू नहीं हुई।
बेन

19
और jquery के नए संस्करणों के लिए फंक्शन प्रोप ("चेक") के बजाय attr ("चेक") के मामले में है जो किसी और को पकड़ता है।
डांस्की

मैं नॉन-बैकवर्ड-कम्पैटिबिलिटी, एस्प के कारण 'प्रोप' से बचता हूं। IE में।
vapcguy

27

वहाँ एक काम है कि jQuery 1.3.2 और 1.4.2 में काम करता है :

$("#myCheckbox").change( function() {
    alert($(this).is(":checked"));
});

//Trigger by:
$("#myCheckbox").trigger('click').trigger('change');​​​​​​​​​​​​​

लेकिन मैं मानता हूं, यह घटना मूल घटना की तुलना में छोटी है।


10

जून २०१६ तक (२.१.४ का उपयोग करके) अन्य सुझाए गए समाधानों में से कोई भी काम नहीं करता है। चेकिंग attr('checked')हमेशा undefinedऔर is('checked)हमेशा रिटर्न देता है false

बस प्रोप विधि का उपयोग करें:

$("#checkbox").change(function(e) {

  if ($(this).prop('checked')){
    console.log('checked');
  }
});

2
is('checked)गलत वापस आएगा क्योंकि "चेक किया गया" CSS छद्म चयनकर्ता नहीं है। सही एक होना चाहिए is(':checked')ताकि इसके बजाय "चेक किया गया" दिखे।
धुपिन

4

मैं अभी भी jQuery 1.7.2 के साथ इस व्यवहार का अनुभव कर रहा हूं। एक साधारण वर्कअराउंड सेट हैंडआउट के साथ क्लिक हैंडलर के निष्पादन को स्थगित करना है और इस बीच ब्राउज़र को अपना जादू करने दें:

$("#myCheckbox").click( function() {
    var that = this;
    setTimeout(function(){
        alert($(that).is(":checked"));
    });
});

हां! थोड़ा सा अपमानजनक, लेकिन मुझे चेकबॉक्स के साथ केडो ग्रिडों में भी ऐसा ही करना पड़ा था जब कोई "नया रिकॉर्ड जोड़ें" क्लिक करता था अगर मैं चाहता था कि यह डिफ़ॉल्ट रूप से "सक्रिय" हो। मुझे इसे 500ms का समय भी देना था। फिर मुझे जोड़ना था .click(), फिर सेट करना था .attr('value', 'true'), फिर .change(), .blur()इससे पहले कि यह प्रोग्राम प्रोग्राम सेट करेगा जब मैंने "अपडेट" बटन को प्रोग्रामिक रूप से क्लिक किया ....
vapcguy

2

यदि आप इसके बजाय अवांछित व्यवहार का अनुमान लगाते हैं, तो इसके आसपास एक दूर jQuery.trigger () से चेकबॉक्स के क्लिक हैंडलर में एक अतिरिक्त पैरामीटर पास करना होगा। यह अतिरिक्त पैरामीटर क्लिक हैंडलर को सूचित करने के लिए है कि क्लिक को प्रोग्रामेटिक रूप से ट्रिगर किया गया है, बजाय उपयोगकर्ता सीधे चेकबॉक्स पर क्लिक करने के। चेकबॉक्स का क्लिक हैंडलर तब रिपोर्ट किए गए चेक की स्थिति को उलट सकता है।

तो यहां बताया गया है कि किस तरह से मैं आईडी "myCheckBox" के साथ एक चेकबॉक्स पर क्लिक इवेंट को ट्रिगर करूंगा। ध्यान दें कि मैं एक एकल सदस्य के साथ एक वस्तु पैरामीटर भी पारित कर रहा हूं, जो कि nonUI है, जो सत्य पर सेट है:

$("#myCheckbox").trigger('click', {nonUI : true})

और यहां बताया गया है कि मैं चेकबॉक्स के क्लिक हैंड हैंडलर में कैसे हैंडल करता हूं। हैंडलर फ़ंक्शन अपने दूसरे पैरामीटर के रूप में nonUI ऑब्जेक्ट की उपस्थिति के लिए जाँच करता है। (पहला पैरामीटर हमेशा ईवेंट ही होता है।) यदि पैरामीटर मौजूद है और सही पर सेट है तो मैं रिपोर्ट की गई स्थिति को उल्टा कर देता हूं। यदि ऐसा कोई पैरामीटर पारित नहीं किया गया है - जो तब नहीं होगा जब उपयोगकर्ता केवल UI में चेकबॉक्स पर क्लिक करता है - तो वास्तविक .checked स्थिति की रिपोर्ट करें:

$("#myCheckbox").click(function(e, parameters) {
   var nonUI = false;
        try {
            nonUI = parameters.nonUI;
        } catch (e) {}
        var checked = nonUI ? !this.checked : this.checked;
        alert('Checked = ' + checked);
    });

JSFiddle संस्करण में http://jsfiddle.net/BrownieBoy/h5mDZ/ पर

मैंने क्रोम, फ़ायरफ़ॉक्स और IE 8 के साथ परीक्षण किया है।


2
<input id="widget-wpb_widget-3-custom_date" class="mycheck" type="checkbox" value="d/M/y" name="widget-wpb_widget[3][custom_date]" unchecked="true">    

var atrib = $('.mycheck').attr("unchecked",true);
$('.mycheck').click(function(){
if ($(this).is(":checked")) 
{
$('.mycheck').attr("unchecked",false);
   alert("checkbox checked");
}
else
{
$('.mycheck').attr("unchecked",true);
 alert("checkbox unchecked");
}
});

कुछ टिप्पणियाँ अच्छी होंगी
Danil Gaponov



0

खैर, पहले परिदृश्य का मिलान करने के लिए, यह कुछ ऐसा है जिसे मैं लेकर आया हूं।

http://jsbin.com/uwupa/edit

अनिवार्य रूप से, "क्लिक" इवेंट को बाइंड करने के बजाय, आप अलर्ट के साथ "परिवर्तन" इवेंट को बांधते हैं।

फिर, जब आप ईवेंट को ट्रिगर करते हैं, तो पहले आप क्लिक ट्रिगर करते हैं, फिर परिवर्तन को ट्रिगर करते हैं।


0

निक क्रेवर के जवाब के अलावा, इस पर ठीक से काम IE 8करने के लिए आपको चेकबॉक्स में एक अतिरिक्त क्लिक हैंडलर जोड़ने की आवश्यकता है:

// needed for IE 8 compatibility
if ($.browser.msie)
    $("#myCheckbox").click(function() { $(this).trigger('change'); });

$("#myCheckbox").change( function() {
    alert($(this).is(":checked"));
});

//Trigger by:
$("#myCheckbox").trigger('click').trigger('change');

अन्यथा कॉलबैक केवल तभी ट्रिगर किया जाएगा जब चेकबॉक्स फ़ोकस खो देता है, IE 8जब वे क्लिक किए जाने पर चेकबॉक्स और रेडियो पर ध्यान केंद्रित करते हैं।

IE 9हालांकि परीक्षण नहीं किया गया ।


0
$( "#checkbox" ).change(function() {
    if($(this).is(":checked")){
        alert('hi');
    }

});

1
कृपया कुछ विवरणों का उल्लेख करें
कोडवर्ड

ऐसा लगता है कि यह केवल एक दोहराया जवाब है, changeओपी के बजाय का उपयोग कर रहा है click, और बस के ifलिए परीक्षण के एक अलग तरीके के रूप में एक बयान का उपयोग करता है :checked
vapcguy

-1

सबसे तेज़ और आसान तरीका :

$('#myCheckbox').change(function(){
    alert(this.checked);
});

$el[0].checked;

$ एल - चयन का jquery तत्व है।

का आनंद लें!


-2
if ($.browser.msie) {
    $("#myCheckbox").click(function() { $(this).trigger('change'); });
}

$("#myCheckbox").change(function() {
        alert($(this).is(":checked"));
    });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.