首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个事件目标中删除事件侦听器

问从另一个事件目标中删除事件侦听器
EN

Stack Overflow用户
提问于 2021-01-12 10:21:29
回答 1查看 199关注 0票数 0

我尝试从另一个事件目标中删除一个事件侦听器:

-I可以从这个“红色事件”中移除红色元素的事件//我可以从这个“绿色事件”中移除绿色元素的事件。

-But我不能从"red event“中移除对绿色元素的事件//我不能从"green event”中移除对红色元素的事件,我不明白为什么。

在第一次单击其中一个元素后,如何删除所有事件侦听器?

​

代码语言:javascript
复制
var clickred = 0;
var clickgreen = 0;
var elemRed = document.getElementById("js-click-me-red");
var elemGreen = document.getElementById("js-click-me-green");

elemRed.addEventListener("click", function h() {
  clickred++;
  if (clickred >= 3) {
    elemGreen.removeEventListener("click", h);
    elemRed.removeEventListener("click", h);
  }

  // debug only
  document.getElementById("js-debug-red").innerHTML += "click<br>";
});

elemGreen.addEventListener("click", function h() {
  clickgreen++;
  if (clickgreen >= 3) {
    elemRed.removeEventListener("click", h);
    elemGreen.removeEventListener("click", h);
  }

  // debug only
  document.getElementById("js-debug-green").innerHTML += "click<br>";
});
代码语言:javascript
复制
body {
  display: flex;
  flex-direction: row;
}

#js-debug-red {
  color: red;
}

#js-debug-green {
  color: green;
}
代码语言:javascript
复制
<body>
  <article>
    <div id='js-click-me-red' style='width: 50px; height: 50px; background-color: red'></div>
    <div id='js-debug-red'></div>
  </article>
  <article>
    <div id='js-click-me-green' style='width: 50px; height: 50px; background-color: green'></div>
    <div id='js-debug-green'></div>
  </article>
</body>

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 10:35:59

在addEventListener外部定义函数,以便为它们提供全局名称,并为两个侦听器指定不同的名称。

​

代码语言:javascript
复制
var clickred = 0;
var clickgreen = 0;
var elemRed = document.getElementById("js-click-me-red");
var elemGreen = document.getElementById("js-click-me-green");

elemRed.addEventListener("click", redListener);

elemGreen.addEventListener("click", greenListener);

function redListener() {
  clickred++;
  if (clickred >= 3) {
    removeAllListeners();
  }

  // debug only
  document.getElementById("js-debug-red").innerHTML += "click<br>";
}

function greenListener() {
  clickgreen++;
  if (clickgreen >= 3) {
    removeAllListeners();
  }

  // debug only
  document.getElementById("js-debug-green").innerHTML += "click<br>";
}

function removeAllListeners() {
  elemGreen.removeEventListener("click", greenListener);
  elemRed.removeEventListener("click", redListener);
}
代码语言:javascript
复制
body {
  display: flex;
  flex-direction: row;
}

#js-debug-red {
  color: red;
}

#js-debug-green {
  color: green;
}
代码语言:javascript
复制
<body>
  <article>
    <div id='js-click-me-red' style='width: 50px; height: 50px; background-color: red'></div>
    <div id='js-debug-red'></div>
  </article>
  <article>
    <div id='js-click-me-green' style='width: 50px; height: 50px; background-color: green'></div>
    <div id='js-debug-green'></div>
  </article>
</body>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65677185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档