Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery是否覆盖事件侦听器?_Javascript_Jquery_Javascript Events_Jquery Click Event - Fatal编程技术网

Javascript jQuery是否覆盖事件侦听器?

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函数,它工作得很好 问题是,我有另一个函数,它添加了更多

我有一堆div,每个div都包含一个与单击事件相关的删除链接,如下所示:

  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方法时。呃。更好地使用。