2013-01-03 106 views
0

我試圖切換使用jQuery一些複選框和我使用的建議通常用於切換複選框搜索時的代碼,但似乎只進行檢查,而不是切換的。繃複選框只檢查,不取消

下面是它的jsfiddle:

http://jsfiddle.net/wgHpG/

的HTML:

<button id="priority-categories" class="btn">Priority</button> 

<input type="checkbox" name="category" value="1" id="1"> 
<input type="checkbox" name="category" value="2" id="2"> 
<input type="checkbox" name="category" value="3" id="3">​ 

的JS:

$('#priority-categories').click(function(){ 

    var categories = [1, 3]; 

    $.each(categories, function(key, value) { 
     $('#' + value).prop('checked', !$('#' + value).checked); 
    }); 
}); 

回答

3

jQuery的對象沒有一個.checked財產,只有DOM元素有它。
$('#' + value).checked永遠是undefined,因此!$(..).checked永遠是true

您可以pass a callback to .prop

$('#' + value).prop('checked', function(i, checked) { 
    return !checked; 
}); 

注意,開始與數字ID是不是在HTML4有效。

0
$('#' + value).prop('checked', !$('#' + value).attr("checked")) 
+0

請擴大您的答案。 –

1

更改爲

$('#' + value).prop('checked', !$('#' + value).is(":checked")); 
2

jQuery的元素沒有一個 '檢查' 屬性。您需要可以使用jQuery的方法來檢查,如果檢查或將其轉換回DOM元素

!$('#' + value)[0].checked 

!$('#' + value).prop('checked') 
0

此代碼,而有點冗長,因爲你希望將切換 - http://jsfiddle.net/wgHpG/2/

$('#priority-categories').click(function(){ 

    var categories = [1, 3]; 

    $.each(categories, function(key, value) { 
     if($('#'+value).is(':checked')) { 
      $('#' + value).prop('checked', false); 
     } else { 
      $('#' + value).prop('checked', true); 
     } 
    }); 
}); 
0

稍有不同的辦法可能是使用jQuery選擇的節點,然後只需撥動上的本機DOM複選框:

var categories = [1, 3]; 

$('#' + categories.join(',#')).each(function() { 
    this.checked = !this.checked; 
}); 
相關問題