You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在点击另一按钮时终止目标按钮的onclick事件?

问题

点击#terminateButton按钮时,希望#myButton被点击后不再弹出alert,同时移除它的onclick事件,但使用removeEventListener没有生效。

原代码

JavaScript
let element = document.getElementById("myButton");

element.onclick = a
document.getElementById("terminateButton").onclick = function () {
  element.innerHTML = "Does Nothing";
  element.removeEventListener('click',a)
};

function a(){
    alert('You clicked the button');
}
HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <button id='myButton'>Shows alert</button>
    <button id='terminateButton'>Dont show alert when other button clicked</button>
    <script src="script.js"></script>
</body>
</html>

原因及解决办法

removeEventListener无效的核心原因是:onclick属于DOM0级事件绑定方式,而removeEventListener只能移除通过addEventListener(DOM2级)绑定的事件,两者不属于同一体系,因此无法互相干预。

下面是两种可行的解决方式:

方式一:直接清空onclick

既然是用onclick绑定的事件,直接将其设为null就能彻底移除绑定:

let element = document.getElementById("myButton");

element.onclick = a
document.getElementById("terminateButton").onclick = function () {
  element.innerHTML = "Does Nothing";
  element.onclick = null; // 直接清空onclick事件
};

function a(){
    alert('You clicked the button');
}

方式二:改用addEventListener绑定事件

如果想使用removeEventListener来移除事件,需要一开始就用addEventListener绑定,这样后续的移除操作才能生效:

let element = document.getElementById("myButton");

element.addEventListener('click', a); // 用DOM2级方式绑定事件
document.getElementById("terminateButton").onclick = function () {
  element.innerHTML = "Does Nothing";
  element.removeEventListener('click', a); // 此时移除操作有效
};

function a(){
    alert('You clicked the button');
}

内容的提问来源于stack exchange,提问作者iMightjustGiveYouaBite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:15:17