2009-12-18 61 views
1

當選中帶有id #checkall的複選框時,當前使用以下選項來選中所有複選框。使用按鈕而不是複選框來檢查jquery中的所有複選框

<script type="text/javascript"> 
$(function() { 
    $('#checkall').click(function() { 
     $(this).parents('fieldset:eq(0)').find(':checkbox').attr('checked', this.checked); 
    }); 
}); 
</script> 

我該如何改變這個以允許使用按鈕而不是複選框? 我試着在html中切換它們,但它似乎不起作用。

+0

一HTML的示例將很有用 – 2009-12-18 14:10:48

回答

2

它在這裏

attr('checked', this.checked); 

該位按鈕沒有checked屬性

使用element.data保持當前選中狀態的值,而不是

例如,設定$('#checkall').data("checked","false")嘗試頁面初始化,然後在隨後的調用中檢查該值是多少,並將其切換爲相反的...

+0

+1 - 這比使用「切換」更好,因爲複選框可以在不使用按鈕的情況下取消選中。 – 2009-12-18 14:15:42

+0

當你可以簡單地將'checked'值存儲在本地可訪問的變量中時,爲什麼使用'data()'? – James 2009-12-18 14:20:43

+0

我同意J-P。 data()對此是一個矯枉過正的問題 – Ariel 2009-12-18 15:52:48

0

你的問題是你仍然使用「this.checked」,一個按鈕將永遠不會被檢查。您必須改用「切換」功能。

0

也許是這個問題在你

, this.checked 

即按鈕沒有檢查狀態

0

您仍然在attr(...)代碼中使用this.checked,這當然不起作用,因爲這是一個按鈕,而不是複選框了。下面將當前在按鈕上的數據屬性「檢查」狀態,從而允許你切換複選框像以前

$('#checkall').click(function() { 
    var ele = $(this); 
    var checked = ele.data("checked"); 
    checked = checked == undefined ? true : checked; 
    $(this) 
     .data("checked", !checked) 
     .parents('fieldset:eq(0)') 
     .find(':checkbox') 
     .attr('checked', checked); 
}); 
0
var checked = false; 
var checkAll = $('#checkall'); 
var checkboxes = checkAll.parents('fieldset:eq(0)').find(':checkbox'); 

checkAll.click(function() { 
    checkboxes.attr('checked', checked = !checked); 
}); 

我做了兩件事情:

  • 的複選框的當前狀態存儲在checked變量中。
  • 每次點擊都不會查詢複選框;相反,我們緩存集合,並在單擊按鈕時簡單地設置屬性。

而且,如果你擔心的全局變量,那麼就換這一切在它自己的範圍:

(function(){ 
    var checked = false; 
    var checkAll = $('#checkall'); 
    var checkboxes = checkAll.parents('fieldset:eq(0)').find(':checkbox'); 

    checkAll.click(function() { 
     checkboxes.attr('checked', checked = !checked); 
    }); 
})(); 
0

給每個小組某一類,然後做

$(".yourclass").attr("checked","true");