简体   繁体   English

注册多个事件侦听器,即使我正在使用removeEventListener

[英]Registering multiple event listeners even though I'm using removeEventListener

This is driving me nuts. 这让我发疯。 I'm getting multiple mouseout events registering even though I'm getting rid of them with removeEventListener(). 我正在注册多个mouseout事件,即使使用removeEventListener()摆脱了它们也是如此。 I've tried all kinds of variations of this. 我已经尝试过各种变化。 Essentially, once the mouseout event happens, I want to get rid of it because the user will be rolling over different images to see a large preview. 本质上,一旦发生mouseout事件,我想摆脱它,因为用户将在不同的图像上滚动以查看较大的预览。 It works fine, but the multiple events registered are ticking me off. 它工作正常,但是注册的多个事件使我不寒而栗。

this.removeEventListener('mouseout', handler, false);

and nothing. 没事了。 I'm not sure what I'm doing here. 我不确定在这里做什么。 I can't seem to get rid of the mouseout events and they just keep on piling. 我似乎无法摆脱mouseout事件,它们只是不断堆积。

document.querySelector('.grid').addEventListener('mouseover',function(e) {
  if (e.target.tagName==='IMG') {
    var myElement=document.createElement('div');
      myElement.className='preview';
      e.target.parentNode.appendChild(myElement);

    var handler = e.target.addEventListener('mouseout', function (d) {
      var myNode = d.target.parentNode.querySelector('div.preview');
      console.log(d.target.parentNode);
      if (myNode) {
        myNode.parentNode.removeChild(myNode);
      }
      this.removeEventListener('mouseout', handler, false);
    });
  } //
}, false); // addEventListener

addEventListener does not return a value, so handler is undefined and the call to removeEventListener will fail. addEventListener不会返回值,因此undefined handler ,并且对removeEventListener的调用将失败。

Use a named function expression instead: 请使用命名函数表达式:

// give the function a name                    vvvvvvv
e.target.addEventListener('mouseout', function handler(d) {
  // ...
  this.removeEventListener('mouseout', handler, false); // use name
}, false); // <- don't forget `false` here, just in case

The name of the function is only accessible inside the function itself. 函数名称只能在函数本身内部访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 即使我使用的是 :not 选择器,也会触发事件侦听器 - Event listener is triggered even though I'm using :not selector Javascript“变量声明但从未使用过”......即使我正在使用它? - Javascript “variable declared but never used”… even though I'm using it? 为什么即使我不使用切换,.show()和.hide()也会切换? - Why are .show() and .hide() toggling even though I'm not using toggle? 如何使用for循环删除多个事件侦听器? - How can I remove multiple event listeners using a for loop? 使用循环创建多个事件侦听器 - Creating multiple event listeners using a loop 为什么即使我使用的是 Set,我的表上的两列也会出现重复值? - Why am I seeing repeated values for both columns on my table even though I'm using a Set? Javascript:即使我使用 window.onload 我也收到错误“var is not defined” - Javascript: even though I'm using window.onload I get the error 'var is not defined' 安装Angular Material,“无法实例化模块ngMaterial”,即使我使用的是角度版本1.3.0 - Installing Angular Material, “Failed to instantiate module ngMaterial” even though I'm using angular version 1.3.0 即使我正在使用函数来防止这种情况,为什么我的输入仍接受所有值? - Why does my input accept all values, even though I'm using a function to prevent this? 即使我正在使用 $(window).on(&#39;load&#39;, function(),jQuery 也会在页面完成加载之前执行 - jQuery executes before page finishes loading even though I'm using $(window).on('load', function()
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM