2012-04-27 13 views
1

私はウェブ上で多くの検索を行い、文字列として$('#checkbox').attr('checked')を扱う例と、それをブール値として扱う例が見つかりました。

$('#AcceptAgreement').attr('checked', false); 

しかし、これはしません:私の場合は

は、私は予想通り、この文が動作することを見つける実際に値が「チェックされているので、

if ($('#AcceptAgreement').attr('checked') == true) 

2番目のステートメントが偽であります'

だからそれは?それは文字列かブール値か、それをどのようにして確実に読み書きできますか?

+0

の「確認」プロパティを使用して状態を変更するには、属性を使用してはならない 'あなたはほとんど常に小道具()メソッドではなくATTR()メソッドをしたいです。 prop()はブール値だけを受け入れますが、attrは両方を受け入れますが、遅くなる可能性があります。あるいは、要素のプロパティにアクセスする適切な方法ではないかもしれません。 ' – Ohgodwhy

+0

IEが 'checked ='でチェックボックスを許可したのは、 1''、 'disabled = 'true''以外のブラウザでは表示されないかもしれません –

答えて

3

これは、使用しているjQueryのバージョンによって異なります。

checkedは、プロパティと属性の両方です。古いバージョンのjQueryでは、通常はブール値だった属性ではなく、.attr()が常にプロパティを返しました。新しいバージョンのjquery(1.6+)には.propという新しいメソッドがあり、.attr()は文字列値を正しく返しますが、ブール値のプロパティ値を返します。プロパティが変更されたときに属性が常に更新されるかどうかはわかりません。

をあなたはそれがチェックされているかどうかを知りたい場合に使用することができます:

あなたが使用することができます
if($('#AcceptAgreement').attr('checked')) 
+0

右の音。私は1.7.1を持っているように見えます。これまでのところ確実に動作しているようだ。 –

1

これは文字列ですが、jQueryをブール値で設定すると、それに応じて属性が変更されます。 「false」に設定すると、attr('checked')undefinedに戻ります。

+0

jQueryのデザイナーは、私はそれを設定したいと思っていますが、 –

+0

@ジョナサン・ウッド:私は彼らの心を見ることができません。私は彼らが何をしたのか知っています。:P –

+0

@JonathanWood '.attr'が実際にブール値を返すときに' .prop'メソッドを追加する前から作成しました。 –

0

$('#isAgeSelected').is(':checked') ? /*true*/ : /*false*/ ; 
+0

しかし、あなたの最初のスニペットは私がやったやり方でも動作し、2番目のスニペットは私の質問で説明した問題を引き起こします。 –

0

if ($('#AcceptAgreement').is(':checked')) 
{ 
    //... 
} 

かshortend:あなたが使用する必要があります書き込むに

1

は今、それは純粋な文字列を返し、

console.log(typeof $('#AcceptAgreement').attr('checked')); 

しかし、jQueryの1.7の前に

が、それはプロパティ値を返すために使用されるデータ型を見つけるの基本的な方法があります。

これに代わる別の方法は、.prop('checked')で、ブール値を返します。

4

おそらく、あなただけのDOMノード

$('#AcceptAgreement')[0].checked = false 
if ($('#AcceptAgreement')[0].checked) 
+0

+1。それについては「おそらく」ない。これは間違いなく最も賢明で信頼できるオプションです。 –

関連する問題