如何覆盖javaScript中“ click”事件的事件处理程序?

Neh*_*pta 4 javascript

我想覆盖click事件的事件处理程序。这是我最初附加的事件处理程序。

document.querySelector("[data-id='start-btn']")
            .addEventListener("click", function (evt) {
                //some code
            });
Run Code Online (Sandbox Code Playgroud)

同样,在某些情况下,我想重写此处理程序,并为“ click”事件附加新的处理程序。

 //removing
 document.querySelector("[data-id='start-btn']")
    .removeEventListener("click", function (evt) {
            //some code
        }, false);

  //attaching new
  document.querySelector("[data-id='start-btn']")
    .addEventListener("click", function (evt) {
            //code
        });
Run Code Online (Sandbox Code Playgroud)

但是它仍然在执行先前的事件处理程序。我使用过removeEventListener(但是我想它不起作用)。

指导我哪里出问题了。

T.J*_*der 5

删除添加了处理程序的唯一方法addEventListener是使用removeEventListener完全相同的参数。这意味着您需要引用原始功能:

var handler = function (evt) {
    //some code
};
document.querySelector("[data-id='start-btn']").addEventListener("click", handler);
Run Code Online (Sandbox Code Playgroud)

然后删除

document.querySelector("[data-id='start-btn']").removeEventListener("click", handler);
Run Code Online (Sandbox Code Playgroud)