2013-09-26 166 views
0

在我的html頁面中,我想動態插入複選框,並且我希望在頂部有一個主複選框,所以如果選中,那麼所有動態創建的複選框都會被選中,如果未選中,那麼所有動態的變得沒有選中。我有這樣的代碼:Jquery複選框toggeling不起作用

<script type="text/javascript"> 
    $(function() { 
     $("#selectAll").click(function() { 
      var checked = $(this).prop('checked'); 
      $(".profilebox").attr("checked", checked); 
     }); 
    }); 
</script> 

主複選框

<input id="selectAll" type="checkbox" name="selectall" value="All"> 

其他複選框:(獲得使用這個PHP代碼在一個循環中插入)

<input type='checkbox' class='profilebox' name='select' value='{$member_id}'> 

但是它不正常。如果我點擊主人,那麼他們都會被檢查。如果我再次點擊它,那麼所有的都會被取消選中,然後如果我再次點擊它們,它們仍然未被選中。

有誰知道這個問題?

感謝

回答

6

使用prop instead of attr,設置元素的屬性保證比設置元素的屬性工作。 jquery的老版本,沒有道具,attr用於執行兩者的工作,後來道具被引入,並設置像這樣的屬性prop服務最好。

$(function() { 
     $("#selectAll").click(function() { 
      $(".profilebox").prop("checked", this.checked); 
     }); 
    }); 
+1

此作品很好,謝謝。 – omega

+1

@ mega歡迎您。 – PSL

1

需要使用.prop()設置檢查屬性,而不是.attr()

$(".profilebox").prop("checked", this.checked); 

例:

$(function() { 
    //cache the selector result 
    var $profileboxes = $(".profilebox"); 
    $("#selectAll").click(function() { 
     $profileboxes.attr("checked", this.checked); 
    }); 
}); 

閱讀:Attributes vs. Properties

1

使用.prop()

$(".profilebox").prop("checked", this.checked); 

現在你的代碼變得

$(function() { 
    $("#selectAll").click(function() { 
     $(".profilebox").prop("checked", this.checked); 
    }); 
}); 

$(ELEM).prop( 「選中」)真(布爾)將與複選框 狀態

$(ELEM).attr改變(「checked」)(1.6)「checked」(String)初始狀態 複選框;不改變$(ELEM).attr( 「選中」)

(1.6.1+) 「選中」(字符串)將與複選框狀態

$(ELEM).attr( 「選中」)改變(pre-1.6)true(布爾型)更改爲 複選框狀態