Javascript jQuery是否覆盖事件侦听器?
我有一堆div,每个div都包含一个与单击事件相关的删除链接,如下所示:Javascript jQuery是否覆盖事件侦听器?,javascript,jquery,javascript-events,jquery-click-event,Javascript,Jquery,Javascript Events,Jquery Click Event,我有一堆div,每个div都包含一个与单击事件相关的删除链接,如下所示: var observeRemoveRoom = function $('.remove_room').click(function(){ $(this).parent().removeClass('active'); }); } 单击它将删除父级(div)的“活动”类。我在窗口加载时调用这个observemoveroom函数,它工作得很好 问题是,我有另一个函数,它添加了更多
var observeRemoveRoom = function
$('.remove_room').click(function(){
$(this).parent().removeClass('active');
});
}
单击它将删除父级(div)的“活动”类。我在窗口加载时调用这个observemoveroom函数,它工作得很好
问题是,我有另一个函数,它添加了更多相同的div。由于window.load上没有包含在新div中的“a.remove\u room”链接,我需要调用observeRemoveRoom
我是否以某种方式复制了事件处理程序?Jquery会覆盖它们吗?如果是这样,我应该解除处理程序的绑定吗?每次调用
observemoveroom
jQuery都会为单击事件添加一个新的唯一事件处理程序函数
因此,是的,您需要
.unbind()
或者只调用.unbind()
而不带参数的所有当前绑定的处理程序,或者是特定的并传入函数引用。是的,如果您再次调用observemoveroom
,您将复制事件处理程序,但是这可能不明显,因为您只调用removeClass
方法,如果找不到该类,该方法将不执行任何操作,在触发第一个侦听器之后就是这种情况
相反,您可以每次取消绑定并重新绑定click事件,如:
var observeRemoveRoom = function(){
var remove_class = function(){
$(this).parent().removeClass('active');
};
$('.remove_room').off('click', remove_class).on('click', remove_class);
}
$(document).ready(function(){
var remove_class = function(){
$(this).parent().removeClass('active');
};
// If the element exists at dom ready, you can bind the event directly
$('.remove_room').on("click", remove_class);
// If the element is added in dynamically, you can [delegate][1] the event
$('body').on("click", '.remove_room', remove_class);
// Note: Although I've delegated the event to the body tag in this case
// I recommend that you use the closest available parent instead
});
但也就是说,建议您在函数“”之外执行此操作,而不是每次都绑定和解除绑定事件,如:
var observeRemoveRoom = function(){
var remove_class = function(){
$(this).parent().removeClass('active');
};
$('.remove_room').off('click', remove_class).on('click', remove_class);
}
$(document).ready(function(){
var remove_class = function(){
$(this).parent().removeClass('active');
};
// If the element exists at dom ready, you can bind the event directly
$('.remove_room').on("click", remove_class);
// If the element is added in dynamically, you can [delegate][1] the event
$('body').on("click", '.remove_room', remove_class);
// Note: Although I've delegated the event to the body tag in this case
// I recommend that you use the closest available parent instead
});
:[1]你可以尝试使用实时查询来更新它们:嗯,那是什么插件?只需将on()与选择器一起使用。on()只会在调用查询时将事件附加到查询结果。实时查询在DOM更改时添加/删除事件。不,不是在DOM更改时,而是在调用jQuery方法时。呃。更好地使用。