2013-06-24 60 views
5

我需要幫助自動檢查樹視圖中的複選框。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

嘗試'.prop()'而不是'.attr()'。 –

回答

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屬性僅用於複選框的初始狀態。

+1

尊重! tnx很棒! – Adrian