2013-03-07 16 views
23

次のjquery/checkboxの動作の理由を見つけるのに問題があります。 input.select_allをクリックしてイベントをトリガし - - input.select_allがチェックされている場合:jquery attr( 'checked'、 'checked')は一度だけ動作します

$(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'); 

} 

}); 

コードは次のように動作するように意図されては、以下の属性がtable.sgrid-内.selectとしてマークされたすべてのチェックボックスにチェックを追加します内容 - そうでない場合:すべてのinput.select項目から 'checked'属性を削除します。

さらに簡単なグリッド機能。そして、それは動作します。奇妙な部分は、それは一度しか動作しません。つまり、すべてのチェックボックスを選択して選択を解除することができます。その操作の後、「すべて選択」機能が機能しなくなります。

もう1つの奇妙なことは、firebugでdom要素をチェックすると、すべてがチェックされるようになりますが、チェックされていないため表示され、動作します。

セレクタは必要に応じて動作します。 ui-state-highlightを追加/削除するコード部分は常に動作します。 explenationの

ワード: グリッドは - 私はgrid.objを取得するために渡したオブジェクト(ceratainのdiv要素の基本的ID)

は私にあなたの意見を教えてくださいです。

+5

利用代わりに '.ATTRの' .prop(真、 '確認')と.prop(偽、 '確認') '( '確認'、 '確認')または.removeAttr'。チェック/選択状態を操作するためのattrがjQueryで廃止されました – codefreak

+1

ありがとうございます。今言及すると、jquery libのアップグレード後に問題が発生しました。ありがとう、それを知っていない! – PiWo

答えて

69

使用小道具(真/偽、「確認」)の代わりremoveAttr

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

.attrの代わりに.propを使用してください – codefreak

+2

私も頭痛を救った:) – NDJ

+0

これは私にとっても便利でした。ありがとう。私も同様の質問があります。支柱と支柱の違いは何ですか?彼らはどちらも同じ仕事をしていませんか? –

0

あなたは属性を変更することができ、かつ要素がそのままであればそれはまた、プロパティを変更します。要素がこの初期状態を離れると、属性の変更はプロパティに影響しなくなります。ブラウザー間で正確な動作が異なる可能性があります。

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

関連する問題