web-dev-qa-db-ja.com

jquery attr( 'checked'、 'checked')は1回だけ機能します

次のjquery/checkbox動作の理由を見つけるのに問題があります。

$( 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-content内で.selectとマークされているすべてのチェックボックスにチェックされた属性を追加します-そうでない場合: 'checkedを削除します'すべてのinput.selectアイテムの属性。

さらに別の単純なグリッド関数。そしてそれは機能します。奇妙な部分は、それが一度だけ機能することです。つまり、すべてのチェックボックスを選択して選択解除できます。その操作の後、「すべて選択」機能は機能を停止します。

もう1つの奇妙なことは、Firebugでdom要素をチェックすると、すべてが必要に応じて、checked = 'checked' attrになりますが、チェックされていないため、表示および動作します。

セレクターは本来どおりに機能します。 i-state-highlightを追加/削除するコード部分は常に機能します。

説明の言葉:grid-grid.obj(基本的にはcertain divのID)を取得するために渡すオブジェクトです

ご意見をお聞かせください。

25
PiWo

RemoveAttrの代わりにprop( 'checked'、true/false)を使用します

$('input[name=foo]').prop('checked', true);
$('input[name=foo]').prop('checked', false);
74
Marek Musielak

属性を変更できます。要素が変更されていない場合は、プロパティも変更されます。要素がこの初期状態を離れると、属性を変更してもプロパティには影響しなくなります。正確な動作は、おそらくブラウザ間で異なります。

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

1
Suraj