在元素上使用mouseenter
或click
等任何事件都不适用于使用infinitescroll
,jquery.load
或jquery.ajax
加载的元素。
我不明白为什么。我知道需要调用函数,但是click事件应该仍然有效,因为加载的元素具有相同的类等,但它们没有!
事件不仅不起作用,而且如果我在新元素加载后回忆它,已经加载的元素现在累积了两个事件,这样如果你做$('.class').toggleClass('.anotherclass')
之类的事情,它会添加然后删除该课程因为现在有两个事件而不是一个。
为什么会这样?我怎么能有一个不会像那样累积的事件?
希望我很清楚,谢谢你!答案 0 :(得分:1)
过去我在动态创建需要绑定事件监听器的元素时遇到过这个问题,这就是你需要做的事情:
$(document).on("event", "#selector", function(){
//Your code here
});
绑定到文档将允许正确触发所有动态事件。只需将事件更改为您需要的内容以及您需要的选择器,它就会起作用。
答案 1 :(得分:0)
这实际上取决于您如何附加事件处理程序。例如:
// This will be attached to all currently existing elements with class
// .class, but not to future ones
$('.class').click(handler);
使用on()
:
// This is attached to the document and if the target of the event
// matches the provided selector then the event would be triggered
// on it. Here it doesn't matter whether the element with class
// .class existed at the time the handler was attached
$(document).on('click', '.class', handler);
我的回答主要在评论中,但差别在于事件处理程序是直接还是委托。