2011-05-29 105 views
88

隨着prop方法的推出,現在我需要知道取消選中複選框的可接受方式。它是:.prop('checked',false)或.removeAttr('checked')?

$('input').filter(':checkbox').removeAttr('checked'); 

$('input').filter(':checkbox').prop('checked',false); 
+4

你看過John Resig的帖子嗎? http://ejohn.org/blog/jquery-16-and-attr/ – 2011-05-29 19:17:08

回答

91

jQuery的3

在jQuery 3,removeAttr確實設置相應屬性false了:

在jQ之前uery 3.0,在布爾屬性上使用.removeAttr()(如checked,selectedreadonly)也會將相應的命名屬性設置爲false。此行爲是古代Internet Explorer版本所必需的,但對於現代瀏覽器不正確,因爲屬性表示初始值,屬性表示當前(動態)值。

在DOM元素上使用.removeAttr("checked")幾乎總是錯誤的。唯一有用的是如果DOM稍後將被序列化回HTML字符串。在所有其他情況下,應該使用.prop("checked", false)

Changelog

因此,只有.prop('checked',false)是正確的方式使用這個版本時。


原來的答覆(2011年):

對於具有潛在的布爾屬性(其中checked是其中之一)的屬性,removeAttr自動設置底層屬性false。 (請注意,這是jQuery 1.6.1中添加的向後兼容「修復」)。

所以,要麼工作......但你給的第二個例子(使用prop)是更正確的兩個。如果您的目標是取消選中該複選框,那麼您確實想要影響屬性,而不是該屬性,並且不需要通過removeAttr來完成此操作。

+3

你可以使用'removeProp()' – 2011-10-11 20:35:40

+34

@tandu:你*可以*,但你不應該。從文檔:「**注意:**不要使用['removeProp()']來刪除本機屬性,如選中,禁用或選中。這將完全刪除屬性,一旦刪除,不能再次添加請使用'.prop()'將這些屬性設置爲false。「 'removeProp'實際上只適用於自定義屬性。 – 2011-10-11 20:51:04

5

使用checked:true,false複選框的屬性。

的jQuery:

if($('input[type=checkbox]').is(':checked')) { 
    $(this).prop('checked',true); 
} else { 
    $(this).prop('checked',false); 
} 
2

另一種替代方法做同樣的事情是在類型=複選框屬性過濾:

$('input[type="checkbox"]').removeAttr('checked'); 

$('input[type="checkbox"]').prop('checked' , false); 

Remeber該差屬性和屬性之間的關係在特定中可能很重要情況。之前jQuery 1.6,。在檢索某些屬性時,attr()方法有時會考慮屬性值,這可能會導致行爲不一致。從jQuery 1.6開始,.prop()方法提供了顯式檢索屬性值的方法,而.attr()檢索屬性。

Know more ...

+2

問題是「哪一個更正確?」,而不是「有沒有其他方法可以做到這一點?」。您好像沒有試圖回答這個問題 – 2014-07-24 08:55:25

3

我建議同時使用,支撐和attR因爲我有Chrome出現問題,我解決它使用兩種功能。

if ($(':checkbox').is(':checked')){ 
    $(':checkbox').prop('checked', true).attr('checked', 'checked'); 
} 
else { 
    $(':checkbox').prop('checked', false).removeAttr('checked'); 
} 
+0

是的,對於Chrome,請使用: '$(「input [type ='checkbox'],input [type ='radio']」)。prop(「checked 「,false).attr(」checked「,false).removeAttr(」checked「);' – Rodrigue 2017-08-04 13:37:27

相關問題