1. 程式人生 > >jQuery中attr()解決checked屬性問題

jQuery中attr()解決checked屬性問題

這兩天在做一個表單提交,其中就包含有checkbox的全選和反選,這是最先開始做出來的版本,程式碼如下:

<input id="checkAll" type="checkbox" />全選
<input name="subBox" type="checkbox" />Php
<input name="subBox" type="checkbox" />Java
<input name="subBox" type="checkbox" />NodeJS
<input name="subBox" type="checkbox" />Python

<script>
$(document).ready(function(){
	$("#checkAll").click(function() {
        //console.log($(this).attr("checked"));
        //console.log($(this).is(":checked"))
        if($(this).attr("checked")){
        	$('input[name="subBox"]').attr("checked",true);
        }else{
        	$('input[name="subBox"]').attr("checked",false);
        }
    });
    
});
</script>

點擊發現一點反應也沒有,到網上搜了一下,發現attr()獲取到的值就沒變過,而is(":checked")會隨著點選變化,就把if條件修改成了if($(this).is(":checked")),發現終於可以了,全選可以,取消全選也可以,但又出現了一個新的問題,只能點選一次,點選一次之後就沒有全選反選的效果了,太奇怪了,這什麼問題!!!

再去搜,發現了一個的東西,prop()這個東東,原來jQuery自從1.6之後就有了它,attr()太混亂,為了區分,就出現了prop(),對於checked,若是prop()獲取的則是瀏覽器對於當前變化著的值,即隨著點選變化而變化,而attr()則是瀏覽器記錄checked的初始值,即它的預設值,不會隨著改變而改變,

然後試了試新的方法,如下:

<script>
$(document).ready(function(){

    $("#checkAll").click(function() {
        if($(this).prop("checked")){
        	$('input[name="subBox"]').prop("checked",true);
        }else{
        	$('input[name="subBox"]').prop("checked",false);
        }
    });
    //or
    var isChecked = $(this).prop("checked");
    $("input[name='subBox']").prop("checked", isChecked);
    
});
</script>
然後你就可以隨意的切換全選反選啦!