.prop( 'checked'、false)または.removeAttr( 'checked')?


115

propメソッドの導入に伴い、チェックボックスのチェックを外す方法を知る必要があります。それは...ですか:

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

または

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

4
John Resigの投稿を読みましたか?ejohn.org/blog/jquery-16-and-attr
Jared

回答:


130

jQuery 3

jQueryの3のとおり、removeAttrないではないに対応するプロパティを設定しfalse、もう:

使用して、jQueryの3.0より前.removeAttr()のようなブール属性上checkedselectedまたはreadonlyも対応するという名前のプロパティを設定しますfalse。この動作はInternet Explorerの古いバージョンで必要でしたが、属性が初期値を表し、プロパティが現在の(動的)値を表すため、最新のブラウザーでは正しくありません。

ほとんどの場合.removeAttr( "checked" )、DOM要素で使用するのは間違いです。DOMが後でシリアル化されてHTML文字列に戻される場合のみ、それが役立つ場合があります。他のすべてのケースで.prop( "checked", false )は、代わりに使用する必要があります。

変更ログ

したがって.prop('checked',false)、このバージョンを使用する場合にのみ正しい方法です。


元の回答(2011年から):

基になるブールプロパティ(そのcheckedうちの1つ)を持つ属性の場合removeAttr、基になるプロパティをに自動的に設定しfalseます。(これは、jQuery 1.6.1で追加された下位互換性「修正」の1つであることに注意してください)。

したがって、どちらも機能します...しかし、(を使用してprop)提供した2番目の例は、2つのうちより正確です。チェックボックスをオフにすることが目的の場合は、属性ではなくプロパティに影響を与えたいので、実行する必要はありremoveAttrません。


36
@tandu:できます、すべきではありません。ドキュメントから: " 注: [ removeProp()]を使用して、チェック済み、無効化、選択などのネイティブプロパティを削除しないでください。これにより、プロパティが完全に削除され、削除すると、要素に再度追加できなくなります。.prop()これらのプロパティをfalseに設定するために使用します代わりに。」removeProp実際には、カスタムプロパティでのみ使用することを目的としています。
John Flatness

17

使用checked:チェックボックスのtrue、falseプロパティ。

jQuery:

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

もしそうでなければ、1つのライナーを使用して、$(this).prop( 'checked'、$( 'input [type = checkbox]')。is( ':checked'));を排除できます。
Yousaf Hassan

8

Chromeに問題があり、両方の機能を使用して解決したので、propとattrの両方を使用することをお勧めします。

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

はい、クロムの場合は次を使用します: $("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
Rod

カスタムコンポーネント(CSS + JS)を使用して、入力ラジオとチェックボックスを置き換えます。これが私にとって唯一有効な方法です。ありがとう!
Silvio Delgado

3

同じことを行う別の方法は、type = checkbox属性でフィルタリングすることです。

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

または

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

特定の状況では、属性とプロパティの違いが重要になる可能性があることに注意してください。jQuery 1.6より前のバージョンでは、.attr()メソッドは、一部の属性を取得するときにプロパティ値を考慮に入れていたため、動作が不安定になる可能性がありました。jQuery 1.6以降、.prop()メソッドはプロパティ値を明示的に取得する方法を提供し、.attr()は属性を取得します。

もっと知る ...


2
問題は、「どちらがより正しいか」であり、「これを行う他の方法はありませんか?」ではありませんでした。あなたは質問に答えようとしなかったようです
Andrew Stubbs
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.