2

具体的には、入力タイプのメモリ内のdomチェックボックスは、FireFoxの「チェック済み」属性(またはその他のチェック済みインジケーター)を受け取りません。

コメントされた行は、テストに合格するためにコメントを外すことができますが、現在、Firefoxでテストが失敗することがわかります。

http://jsfiddle.net/mE3xb/2/

var cb = $('<input type="checkbox" />')
//var cb = $('input'); 
if (cb.is(':checked')) alert("checkbox says it's already checked"); 
cb.click(); 
if (cb.is(':checked')) alert("checkbox clicked correctly!"); 
else alert("fail!"); 

私は非標準的なことをしていますか?何かアドバイス?私は基本的にjQuery.clickに依存して、UIのチェックボックスを実際にチェックしています(そして、.attr、.prop、.valを使用したくないのは、これまで行っていたカプセル化が壊れてしまうためです)。

4

3 に答える 3

4

jQuery 1.4.3を使用しているため、最善の策は次のようになります。

cb[0].setAttribute('checked', 'checked'); // plain old vanilla JS

jsFiddleデモ-FireFox、Chrome、IE8でテスト済み

.click()Firefoxの多くの奇妙な状況では機能しません(そのブラウザでは本質的に間違っている/異なるものです)。まだ実際にはDOMで利用できないため、このイベントがどこにあるかはわかりません。.prop()これは、存在するなどの多くの理由の1つです。

于 2013-01-22T17:04:16.367 に答える
3

チェックボックスをオンにするcb.prop('checked', true)代わりに使用するcb.click()

フィドルはhttp://jsfiddle.net/mE3xb/7/を更新しました

于 2013-01-22T17:05:11.143 に答える
1

私はこれが古い質問であることを知っています、しかし私はちょうど私のユニットテストのために私のために働いた答えに出くわしました:

まず、チェックしたプロパティを切り替えます。

checkbox4[0].checked = !checkbox4[0].checked;

その後、クリックハンドラーを「ただ」トリガーします(triggerHandlerを使用しても、他のブラウザーでチェックボックスを再度オン/オフにすることはありません)。

checkbox4.triggerHandler( "click" );

これは、ユーザーがチェックボックスを「クリック」し、チェックボックスをオン/オフすることをシミュレートします。(上記のコメントと回答を読んで)あなたのニーズに合うようにカプセル化されているわけではありませんが、現在受け入れられている回答よりも少し徹底的に仕事をしているようです。

于 2014-10-15T21:04:48.433 に答える