我在index.html
近六成過濾器按鈕,每個都連有$().click()
事件處理程序。jQuery的:如何確保事件處理程序連接到所有相關的元素在DOM
$(document).ready(function() {
$('.filter_button_class').click(function(e) {
console.log("filter button clicked");
e.preventDefault();
});
});
在我的CSS文件中,:active
選擇確保被點擊時,它的過濾器按鈕會變成藍色。
現在的代碼工作正常,大部分的時間。當瀏覽器首次加載index.html
時,事件處理程序似乎都正確連接,代碼始終按預期工作。這是一個單頁的應用程序,所以當用戶點擊後退按鈕返回到index.html
在過濾器上的一個按鈕再次點擊,它確實會變成藍色,但.click()
處理程序中的代碼有時不執行。
我懷疑這可能是因爲當index.html
被重新加載,用戶點擊過濾器按鈕前,不是所有的點擊處理得到重視。但是當用戶再次點擊相同的過濾器按鈕(總共兩次)時,處理程序通常會執行。
問題有沒有辦法讓代碼在click()
之內等待執行,直到所有的事件處理程序被首先連接?
而不是.click()
我自己也嘗試.on()
但這並沒有影響。也可能是我所識別的問題(事件處理程序附加到元素太慢)是錯誤的,但我當然會很感激任何反饋。
當然,如果你動態地添加它們,而不是在HTML中定義它們,那就不一樣了。具體來說,它[會是這個](http://stackoverflow.com/questions/203198/event-binding-on-dynamically-created-elements)。 –
@ T.J.Crowder感謝您的反饋。如果通過「動態添加它們」表示這些元素本身,則HTML濾鏡按鈕都不是靜態的。你是說'ready'回調通常可以確保所有的事件處理程序都會附加到它們的元素上嗎? – orlando21
所有'ready'保證的是,當DOM被完全解析時,你給它的回調將被調用。我想我知道你的情況發生了什麼;看到我更新的答案。 :-) –