从处理函数

时间:2017-07-27 07:35:44

标签: javascript event-listener

我有一个函数begin,它声明了一个带有处理函数check的addEventListener。现在,当check内满足特定条件时,我想删除eventListener。

我的代码:

function begin(data){
    //code
    window.addEventListener('keyUp', check(data));
}

function check(data){
    return function check1(event){
        //code
        if(condition) window.removeEventListener('keyUp', check(data));
    }
}

一切正常,但它并没有删除EventListener

3 个答案:

答案 0 :(得分:3)

您必须使check(data)响应函数对处理程序唯一,例如将其传递给变量。否则,每次拨打check(data)并尝试删除错误的一个时,您将获得另一个功能。

var handler;

function begin(data) {
    handler = check(data);
    window.addEventListener('keyUp', handler);
}

function check(data) {
    return function check1(event) {
        if(condition) {
            window.removeEventListener('keyUp', handler);
        }
    }
}

答案 1 :(得分:3)

对于check1的每次调用,check始终是不同的功能,因此您可以使用window.removeEventListener('keyup', check1 )删除自己:

function begin(data) {
  //code
  window.addEventListener('keyup', check(data));
}

function check(data) {
  return function check1(event) {
    if(condition) {
       window.removeEventListener('keyup', check1 );
    }
  }
}

答案 2 :(得分:1)

正如其他人指出你的处理函数不是check所以你不能删除它。处理函数是函数检查返回。

为了更好地了解最新情况,您可以输入。

check().prototype.constructor.name // 'check'
check.prototype.constructor.name   // 'check1'