26

次の 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つの奇妙なことは、dom要素をfirebugでチェックすると、すべてchecked = 'checked'属性になりますが、チェックされていないので表示され、動作します。

セレクターは正常に機能します。ui-state-highlightを追加/削除するコード部分は常に機能します。

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

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

4

2 に答える 2

77

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

$('input[name=foo]').prop('checked', true);
$('input[name=foo]').prop('checked', false);
于 2013-03-07T08:44:10.000 に答える
3

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

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

于 2016-10-17T09:20:39.570 に答える