我在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被完全解析时,你给它的回调将被调用。我想我知道你的情况发生了什么;看到我更新的答案。 :-) –