2013-06-24 10 views
5

私はtreeviewの自動チェックボックスに助けが必要です。jQueryはチェックボックスをチェックしません

私はツリービューを持っています。チェックボックスをクリックすると、リスト内のすべての子アイテムにチェックボックスが自動的にチェックされます。問題はそれが機能しないことです。

treeview.find('input[type=checkbox]').each(function() { 
    $j(this).click(function() { 
     if ($j(this).is(':checked')) { 
      $j(this).siblings('ul').find('input[type=checkbox]').attr('checked', 'checked'); 
     } else { 
      $j(this).siblings('ul').find('input[type=checkbox]').removeAttr('checked'); 
     } 
    }); 
}); 

コードでは、すべてのチェックボックスを見つけて、それぞれのクリックイベントをバインドします。アイテムがクリックされると、それはチェックされているかどうかをチェックし、すべてのチェックボックスを見つけて属性をチェックするように設定します。チェックボックスをすべて見つけてチェック属性を削除します。私のセレクタは問題なく動作します。

チェックボックスをクリックすると、すべてのチェックボックスがオンになり、チェックを外すとまだ機能しています。しかし、別の試行では、もう動作しません!それは非常に奇妙です!そして、私がコードを調べると、チェックボックスにはchecked="checked"があるが、ブラウザーはチェックされた状態をレンダリングしないことがわかります(実際はこれが主な問題です)。

+6

'.attr()'の代わりに '.prop()'を試してみてください。 –

答えて

13

用途:

$el.prop('checked', true) // to check the box 
$el.prop('checked', false) // to uncheck the box 

の代わりに:

$el.attr('checked', 'checked') // to check the box 
$el.removeAttr('checked') // to uncheck the box 

あなたはボックスではなく、checked属性のチェック状態を変更する必要があるためです。 checked属性は、チェックボックスの初期状態のみです。

+1

尊敬!たくさんの! – Adrian

関連する問題