javascript
  • jquery
  • 2012-04-15 16 views 23 likes 
    23

    मैंने चेक बॉक्स बदलने के लिए जावास्क्रिप्ट/jQuery का यह स्निपेट लिखा था। http://jsfiddle.net/johnhoffman/crF93/डायनामिक रूप से चेकबॉक्स क्यों बदलता है एक फॉर्म चेंज इवेंट ट्रिगर नहीं करता है?

    जावास्क्रिप्ट

    $(function() { 
        $("a").click(function() { 
         if ($("input[type='checkbox']").attr('checked') == "checked") 
          $("input[type='checkbox']").removeAttr('checked'); 
         else 
          $("input[type='checkbox']").attr('checked', 'checked'); 
         return false; 
        }); 
    
        $("input[type='checkbox']").change(function(){ 
         console.log("Checkbox changed.");    
        });  
    });​ 
    

    एचटीएमएल

    <input type="checkbox" /> 
    <a href="#">Change CheckBox</a>​ 
    

    दिलचस्प है, लिंक पर क्लिक पाठ बॉक्स बदल देता है, लेकिन रूप परिवर्तन घटना समारोह है कि क्रोम में संदेश लॉग कॉल ट्रिगर नहीं करता वेब डेवलपर कंसोल। क्यूं कर? मैं इसे कैसे कर सकता हूं?

    +0

    [ "परिवर्तन घटना तब होता है जब एक नियंत्रण इनपुट फ़ोकस खो देता है और अपने मूल्य के बाद से संशोधित किया गया है फोकस प्राप्त करना। "] (http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-htmlevents) कोई फोकस परिवर्तन का मतलब कोई बदलाव नहीं है। –

    +0

    संभावित डुप्लिकेट [जब परिवर्तन एन्थर फ़ंक्शन से आता है तो चालू ईवेंट नहीं आग लगती है] (http: // stackoverflow।कॉम/प्रश्न/7055729/ऑन-चेंज-इवेंट-नो-फायर-ए-द-चेंज-ए-एथर-फ़ंक्शन) –

    उत्तर

    24

    ताकि घटना को पता है कि एक परिवर्तन हुआ आप परिवर्तन घटना, .trigger('change') को गति प्रदान करने की जरूरत है।

    http://api.jquery.com/change/ से:

    विवरण: "बदलाव" JavaScript घटना के लिए एक ईवेंट हैंडलर में आबद्ध करें, या एक तत्व पर है कि घटना को ट्रिगर।

    यह विधि पहले दो भिन्नताओं में .on("change", handler) के लिए शॉर्टकट है, और तीसरे स्थान पर .trigger("change") है।

    change ईवेंट को उसके मान में परिवर्तन होने पर तत्व को भेजा जाता है। यह घटना <input> तत्वों, <textarea> बक्से और <select> तत्वों तक सीमित है। चयन बॉक्स, चेकबॉक्स और रेडियो बटन के लिए, जब उपयोगकर्ता माउस के साथ चयन करता है तो ईवेंट तुरंत निकाल दिया जाता है, लेकिन अन्य तत्व प्रकारों के लिए ईवेंट तब तक स्थगित हो जाता है जब तक कि तत्व फोकस न हो जाए।

    डेमो:

    http://jsfiddle.net/nPkPw/3/

    चेनिंग का उपयोग करना: http://jsfiddle.net/nPkPw/5/
    यानी $("input[type='checkbox']").trigger('change').attr('checked', 'checked');

    +1

    एक क्लिक – Sinetheta

    +0

    @ सिनेटेटिया हाया कोयोलोज़ अनुकरण करने के लिए थोड़ा वर्बोज़ लगता है, इसे थोड़ा सा ट्रिम कर देगा। :) cheerios! भविष्य के संदर्भ के लिए –

    +5

    , मुझे एटीआर के बाद ट्रिगर रखना पड़ा ताकि मेरी स्क्रिप्ट यह देखने के लिए कि परिवर्तन क्या था। – Yohn

    10

    यह आश्चर्य की बात नहीं है, लेकिन मुझे लगता है कि आप गैर-प्रभाव in the msdn की सूची में ऐसा कर सकते हैं।

    • "सामग्री को प्रतिबद्ध होने पर यह घटना निकाल दी जाती है और मूल्य बदल रहा है।"
    • "जब ऑब्जेक्ट ईवेंट आग लगती है तो चयनित ऑब्जेक्ट का चयनित विकल्प प्रोग्रामेटिक रूप से बदला जाता है।"

    आप कर सकते थे हमेशा से ही .click() यह jsFiddle

    संबंधित मुद्दे

     संबंधित मुद्दे