javascript - 如何在 Javascript 中取消绑定(bind)按钮上的现有点击事件并将其替换为新事件

标签 javascript html web-frontend

基本上我想做的是:

我克隆了一个按钮,并用克隆的按钮隐藏了现有按钮。我想在克隆按钮上绑定(bind)一个新功能,并希望删除以前的事件。

我尝试过removeEventListener(),但没有成功。

我分享了一段代码以便更好地理解。

let formSelector = document.querySelectorAll('form[action="/cart/add"]');
formSelector.forEach(function(e) {
e.setAttribute("data-plusbooster-offer", true);
let addToCart__button = e.querySelectorAll('[name="add"]') 
                      || e.querySelectorAll('[type="submit"]') 
                      || e.querySelectorAll(__addToCart__class__static);


addToCart__button.forEach(function(response) {
    let cloneBtn = response.cloneNode(true);
    cloneBtn.classList.add(["plusbooster__btn"],["__addUpsell"]);

    cloneBtn.setAttribute("onclick", "removeThat(this)");

    response.parentNode.insertBefore(cloneBtn, response);
    response.classList.add("plusbooster__hidden");
    response.style.display = "none";
  });
});

最佳答案

使用addEventListenerremoveEventListener提供对相同事件处理函数的引用

You can remove an Event Listener only if you have a reference to the function used as a handler when the event listener was added. If an annonymous function is used, the listener will not be removable.

您可以在以下示例中看到附加和删除事件监听器的适当方法:

// select element
let myElement = document.getElementById('myElement');

// Handler 1
function myHandler_1(e){
    alert('Handler 1')
}

// Handler 2
function myHandler_2(e){
    alert('Handler 2')
}

// add a click event listener using myHandler_1()
myElement.addEventListener('click',myHandler_1)
// remove the previous assigned event handler
myElement.removeEventListener('click',myHandler_1)

// add another click event listener using myHandler_2()
myElement.addEventListener('click',myHandler_2)

// test : on click event you will see how the first 
// listener has been removed, and instead only the 
// second one is triggered
<div id="myElement">click me</div>

You can find more details and considerations in mozilla developer pages

关于javascript - 如何在 Javascript 中取消绑定(bind)按钮上的现有点击事件并将其替换为新事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064976/

相关文章:

javascript - 区分同一文本层内的多种字体

javascript - HTML 弹出 PDF

jquery - 为什么工具提示不使用 jquery 初始化?

javascript - 如何模糊除列表项之外的整个主体?

html - float bootstrap4 仅适用于一种尺寸的屏幕

javascript - jQuery 多选不适用于 AngularJS

javascript - 脚本标签中的 Angular 变化值

javascript - 使用 contenteditable

javascript - 根据所选选项禁用单选按钮

javascript - 按类名对 HTML 元素进行排序,但元素具有多个类