2011-01-25 78 views
1

我當前的代碼:jQuery的複選框

<script type="text/javascript"> 
    function checkAll(checked) { 
     $("input[type='checkbox']:not([disabled='disabled'])").attr('checked', checked); 
    } 
</script> 
<input type="checkbox" id="cbxSelectAll" onclick="checkAll(this.checked);" /> 

短的版本:

如何修改函數調用和上面的方法來檢查表內的所有複選框包含checxbox表單元素。

長版本:

我創建包含在asp.net網格認爲將不得不刪除選項WebUserControl。我希望刪除是一系列複選框,並在標題中選擇一個框來選擇所有這些複選框。對於非ASP.NET人員來說,這是一個帶有一個複選框的標題行,每行也都有一個checxbox。

我已經使用上面的代碼來檢查整個頁面上的所有框。這不會在這裏工作,因爲我想在頁面上有多個獨立工作的頁面。我知道我可以使用選擇器來選擇所有框,如果我爲表標識了ID,但這需要一些編碼來唯一命名該表,然後將該名稱放在腳本塊中。

真的,我想修改上面的腳本來檢查包含「全選」框中的所有複選框。包含複選框的表格可以嵌套在其他表格中,但是我沒有看到其中嵌套,或者如果存在並且嵌套表格也包含checxboxes,我不關心它們是否也被選中。

感謝您的幫助。

回答

2

首先,不要混合你的HTML和你的Javascript。改用事件處理程序綁定。

其次,用closest得到特定類型的最近的祖先元素:

$(document).ready(function(){ 
    $('#cbxSelectAll').click(function() { 
     $(this) 
      .closest('table') // get the parent table element 
      .find("input:checkbox:enabled") // find children that match the selector 
      .attr('checked', this.checked); // set their checked value 
    }); 
}); 
+1

我想你想改變.closest來找到父表格元素。類似.closest('table')。 – derek 2011-01-25 18:21:51

+0

@derek的確如此 - 感謝您的支持。 – lonesomeday 2011-01-25 18:24:52

0

您可以找到全部選擇使用.closest

function checkAll(checked) { 
    var $table = $(this).closest('table'); 
    $table.find("input[type='checkbox']:not([disabled='disabled'])") 
      .attr('checked', checked); 
} 

如果可能有幾個嵌套包含表表格通常最容易指定你想要的類,例如$(this).closest('table.tableOfCheckboxes');將類tableOfCheckboxes添加到要查找的表中。

2

你的網線屬性更改爲這樣:

<input type="checkbox" id="cbxSelectAll" onclick="checkAll.call(this);" /> 

而且你checkAll()這樣:

function checkAll() { 
    $(this).closest('table').find("input:checkbox:enabled").attr('checked', this.checked); 
} 

使用.call(),它從元素的上下文叫點擊。

然後,jQuery獲取closest()(docs)<table>並使用checkbox-selector(docs)enabled-selector(docs)找到輸入。

然後,當使用attr()(docs)方法時,可以使用this.checked將複選框設置爲所選中的當前狀態。