2013-03-07 14 views
23

मैं निम्नलिखित jQuery/चेकबॉक्स व्यवहार के लिए कारण खोजने एक समस्या है।jQuery attr ('जाँच', 'जाँच') काम करता है केवल एक बार

$(this.obj + ' table.sgrid-content > thead > tr > th > input.select_all').on('click' , {grid:this} , function(event){ 

var grid = event.data.grid; 

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

    $(grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ').attr('checked','checked'); 
    $(grid.obj + ' .sgrid-content > tbody > tr > td > input.select ').parents('tr').addClass('ui-state-highlight'); 

} else { 

    $(grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ').removeAttr('checked'); 
    $(grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ').parents('tr').removeClass('ui-state-highlight'); 

} 

}); 

कोड के रूप में काम करने का इरादा है इस प्रकार है: - input.select_all पर क्लिक करें घटना से चलाता है - अगर input.select_all चेक किया गया है: विशेषता जोड़ें सभी चेक बॉक्स table.sgrid- भीतर .Select के रूप में चिह्नित करने के लिए जाँच की सामग्री - यदि नहीं: सभी इनपुट से 'चेक' विशेषता हटाएं। आइटम का चयन करें।

फिर भी एक और सरल ग्रिड समारोह। और यह काम करता है। अजीब हिस्सा यह है कि यह केवल एक बार काम करता है। इसका मतलब है, आप सभी चेकबॉक्स का चयन कर सकते हैं और उन्हें अचयनित कर सकते हैं। उस ऑपरेशन के बाद "सभी का चयन करें" फ़ंक्शन काम करना बंद कर देता है।

एक और अजीब बात है, जब मैं फ़ायरबग साथ डोम तत्वों की जांच है वे सभी की जाँच = बन के रूप में वे चाहिए attr 'को चेक किया', पर वे प्रदर्शित करने और के रूप में वे जाँच नहीं कर रहे थे व्यवहार करते हैं।

चयनकर्ता के रूप में वे चाहिए काम करते हैं। को हटाने ui-राज्य के मुख्य आकर्षण जोड़ने/के साथ कोड हिस्सा हर समय काम करता है। explenation की

शब्द: ग्रिड - उद्देश्य यह है कि मैं (एक ceratain div की मूल रूप से आईडी) grid.obj प्राप्त करने के लिए पारित

मुझे अपनी राय दे कृपया है।

+5

उपयोग '.prop ('जाँच', true) और .prop ('जाँच', झूठी)' 'बजाय .attr की ('जाँच', 'जाँच') या .removeAttr'। चेक/चयनित राज्यों जोड़ तोड़ के लिए attr अब – codefreak

+1

धन्यवाद jQuery में हटाई गई है, अब जब आप इसे का उल्लेख है, समस्या jQuery lib अपग्रेड करने के बाद शुरू कर दिया। बहुत बहुत धन्यवाद, यह नहीं पता था! – PiWo

उत्तर

69

उपयोग प्रोप ('जाँच', झूठी सही /) बजाय removeAttr

$('input[name=foo]').prop('checked', true); 
$('input[name=foo]').prop('checked', false); 
+1

.attr – codefreak

+2

के बजाय .prop का उपयोग करें मुझे भी एक सिरदर्द बचाया :) – NDJ

+0

यह मेरे लिए भी उपयोगी था। धन्यवाद। मेरे पास एक प्रश्न भी है। प्रोप और एटीआर के बीच क्या अंतर है? क्या वे दोनों एक ही काम नहीं कर रहे हैं? –

0

आप विशेषता को बदल सकते हैं, और वह भी संपत्ति बदल जाएगा, अगर तत्व अछूता है की। एक बार जब तत्व इस प्रारंभिक स्थिति को छोड़ देता है, तो विशेषता बदलना अब संपत्ति को प्रभावित नहीं करता है। सही व्यवहार शायद ब्राउज़र के बीच बदलता है।

Instead of .attr('checked', 'cheked') use .prop('checked', true)

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