2011-08-08 8 views
0

注:これはすべてクロムにあります。jQueryでクリックイベントをシミュレートする方法

クリックするとチェックボックスに応答するものをテストしようとしています。私はjQuery.click()が存在することを認識していますが、クリックハンドラ中にチェックボックスの状態はまだ更新されていません(チェックボックスがオフになっているので、.click()ハンドラでは、チェックボックスはまだチェックされていません。実際にボックスをクリックすると、ハンドラで状態がチェックされます)。私はここで、紛らわしい問題について謝罪

はフィドルあるhttp://jsfiddle.net/XBhWy/

FOO]ボタンをクリックして、気付くそのボタン・ハンドラは、それが確認されたと言いますが、チェックボックスハンドラはそれもUIかかわらず、(確認されていないと言いますチェックマークが表示されます)。次に、チェックボックスをクリックします。クリックイベントハンドラは、レポートすると予想される内容を報告していることに注意してください。

私の質問は、実際にボックスをクリックしたときと同じことをシミュレートする方法です。

今、私は残念ながら(とやや紛らわしい)この

$.fn.check = function() { 
    if ($(this).is(':checked')) { 
    $(this).attr('checked', 'checked'); 
    } else { 
    $(this).removeAttr('checked'); 
    } 
    $(this).click(); 
} 

のような優れたシミュレートされたイベントで刺しを取った、それが動作しませんでした。

これまで誰でも実行できますか?達成することはできますか?

私はclickメソッドを探しているわけではありません。

+3

あなたはhttp://api.jquery.com/click/を試みたことがありますか? –

+0

それは動作しないので.....? –

答えて

1

チェックボックスが実際に更新される前に、チェックボックスclick()で宣言されたユーザー指定の関数が発生するようです。私はそれと一緒に遊んで、change()リスナーが期待どおりに動作することを発見しました。

jsfiddle

+0

変更は良いアイデアです、これを投稿する前に少なくとも1時間クリックすることと頭を強く打っていました。トリガーの制限について話している何かのマトリックスを持っている人がいれば、非常に便利だろうかと思う。 –

+0

イベントが発生したときの一貫性が失われている可能性が最も高い。私は公式のjqueryバグトラッカーに[バグレポート](http://bugs.jquery.com/ticket/10005)を提出しました。 – K4emic

1

​​から:

.trigger()が合成イベントオブジェクトとの完全なイベントの活性化をシミュレートするが、それは完全に天然に存在するイベントを複製しません。

だから、それは私が推測していることです。この場合、いくつかの順序が変わります。

+0

ええ、私が探しているものは回避策です –