2011-05-12 15 views
0

私はこれが働くだろうと思った:チェックボックスがオンになっているかチェックされていないかを確認するにはどうすればよいですか?

if ($(this).attr('checked')) {} 

が、私はそれをこのように書かなければならなかった:

if ($(this).is(':checked')) {} 

Q:なぜ?

+4

なぜ質問ではないですか。これは奇妙な2kユーザーのようですか? – Hogan

+0

+1私を笑わせるための@Hogan。 – pixelbobby

+0

どのjqueryバージョンを使用していますか? – scrappedcola

答えて

2

は最近、このをしてきた、それはあなたが使用しているのjQueryのバージョンに依存します。 1.6以降は、ブラウザの動作によって一貫性のない結果が返される可能性があるため、ネイティブプロパティ(例:「checked」、「disabled」)を持つattrの機能 - 属性は存在するかどうかに関係なく変更されます。

1.6でプロパティを設定またはテストする正しい方法は、常にtrueまたはfalseを返す新しいprop関数です。 2番目の方法は、テストにも有効です。

7

あなたはattrが確認を要求、あなたはブール値を取得されていません。

// this would be correct 
if($(this).attr('checked') == 'checked') 

// jQuery 1.6+ 
if($(this).prop('checked')) 
+0

選択したように、ブラウザやケースがあると思います失敗しました。 (したがって、支柱を使用するための変更)。 – Hogan

+0

属性の値がブール値の定数 'true'であることは完全に問題ありません。特に**チェックされていない文字列**でなければなりません。 DOMでは、属性は実際には単純なブール値です。 – Pointy

1

いっそのこと、ただ返すthis.checkedを使用するか "true" または "false"。特にDOMノードがある場合は、jQueryを使用する必要はありません。

+0

jQueryの代替機能がある場合はネイティブJavaScriptを使用することを恐れています。なぜなら、あるブラウザでは一方向の動作を行い、別のブラウザでは別の動作をするかどうかわからないからです。 jQueryは、コードが正規化されていることを確認するのに役立ちます。 –

+0

わかりましたが、私はほとんどの場合同じアプローチを取っています。しかし、 'checked'プロパティは100%クロスブラウザなので、この特定のケースでは期待通りに動作します。 – ehynds

関連する問題