事件不处理已加载的元素

时间:2013-07-26 14:56:34

标签: jquery events infinite-scroll jquery-load

在元素上使用mouseenterclick等任何事件都不适用于使用infinitescrolljquery.loadjquery.ajax加载的元素。

我不明白为什么。我知道需要调用函数,但是click事件应该仍然有效,因为加载的元素具有相同的类等,但它们没有!

事件不仅不起作用,而且如果我在新元素加载后回忆它,已经加载的元素现在累积了两个事件,这样如果你做$('.class').toggleClass('.anotherclass')之类的事情,它会添加然后删除该课程因为现在有两个事件而不是一个。

为什么会这样?我怎么能有一个不会像那样累积的事件?

希望我很清楚,谢谢你!

2 个答案:

答案 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);

我的回答主要在评论中,但差别在于事件处理程序是直接还是委托。