香草JavaScript-取消绑定

香草JavaScript-取消绑定,javascript,Javascript,我有以下代码,用于查找所有td元素的单击事件: [].forEach.call(document.querySelectorAll('td'), function(e) { e.addEventListener('click', function(event) { var clicked = []; clicked.push(event.target.parentNode.getAttribute('data-a')); clicked.p

我有以下代码,用于查找所有td元素的单击事件:

[].forEach.call(document.querySelectorAll('td'), function(e) {
    e.addEventListener('click', function(event) {
        var clicked = [];
        clicked.push(event.target.parentNode.getAttribute('data-a'));
        clicked.push(event.target.getAttribute('data-b'));
        this.callEvent(clicked, event.target);
    }.bind(this));
}.bind(this));
然后我有一个基本的if-else语句来检查数据属性。看起来click函数保持绑定状态,就像我登录到控制台的if语句一样,条件为true。 在第一次运行之后,true条件只运行,如果下一次运行,false运行,true也运行。。然后,每次单击之后,都会为之前的每次单击运行条件


我做错了什么?是否每次都需要以某种方式解除单击功能的绑定?

您是否检查了当您试图运行
this.callEvent
时,this是什么?我不喜欢那些
.bind(this)
位的外观…事件处理程序一直保持连接状态,直到您删除它们(例如,使用
removeEventListener
)或元素被销毁。您似乎在重复运行此代码;这通常不是一个好主意(并且在代码中会导致多次附加处理程序)。通常情况下,您希望将它们连接一次,然后让它们根据运行时发现的信息执行(或不执行)操作。@NiettheDarkAbsol:它们很好,
这个
将是运行该代码时的
任何内容。谢谢@T.J.Crowder,如果我不重复调用该函数,事件将不会保持连接状态?这是否意味着我不需要使用
removeEventListener
,或者我需要使用它?它现在正在工作,再次感谢您的帮助。我刚刚从一个被反复调用的函数中删除了click处理程序,它的效果很好:)