index.html
に約60個のフィルタボタンがあり、それぞれに$().click()
イベントハンドラが添付されています。私のCSSファイルでjQuery:DOM内の関連するすべての要素にイベントハンドラを確実に取り付ける方法
$(document).ready(function() {
$('.filter_button_class').click(function(e) {
console.log("filter button clicked");
e.preventDefault();
});
});
、:active
セレクタは、それがクリックされたときに、フィルタボタンが青色に変わり保証します。
ほとんどの場合、コードは正常に機能します。 index.html
が最初にブラウザに読み込まれると、イベントハンドラはすべて正しく接続されているように見え、コードは常に意図どおりに機能します。これは単一のページアプリケーションなので、ユーザーがindex.html
に戻って戻るボタンを押してもう一度フィルターボタンをクリックすると、実際には青色に変わりますが、.click()
ハンドラーのコードは実行されないことがあります。
index.html
を再読み込みすると、ユーザーがフィルタボタンをクリックする前にすべてのクリックハンドラが接続されているわけではないことが考えられます。しかし、ユーザーが同じフィルターボタンを再度クリックすると(合計2回)、通常はハンドラーが実行されます。
質問click()
のコードをすべてのイベントハンドラが最初に接続されるまで実行するのを待つ方法はありますか?
.click()
の代わりに私も.on()
を試しましたが、これは効果がありません。私が特定している問題(イベントハンドラが要素にあまりにも遅く付く)は間違っているかもしれませんが、私はもちろんフィードバックをいただければ幸いです。
もちろん、それらを動的に追加していて、HTMLで定義していなければ、それは違うでしょう。具体的には、これは[これになります](http://stackoverflow.com/questions/203198/event-binding-on-dynamically-created-elements)。 –
@ T.J.Crowderご意見ありがとうございます。 「動的に追加する」とは、要素自体を意味し、HTMLフィルタボタンはすべて静的ではありません。 'ready'コールバックは、一般的に、すべてのイベントハンドラがその要素にアタッチされることを保証していますか? – orlando21
すべての 'ready'保証は、あなたが与えたコールバックが、DOMが完全に解析されたときに呼び出されるということです。あなたのシナリオで何が起こっているのか分かっていると思います。私の更新された答えを見てください。 :-) –