removeEventListener无法正常工作?

时间:2017-11-05 22:06:22

标签: javascript addeventlistener event-listener

以前曾多次询问过,但我所看到和试过的所有人都不知道,或者似乎因为某些原因而无法工作

onEnter接受一个回调,只要按下回车键就会触发(这很有用),但当我尝试拨打MouseEvent时,它似乎无法正常工作。我已尝试将该功能变为变量而非声明,我已尝试为添加/删除设置removeEventListener()标记,并且我已尝试尝试{{{{{{ 1}}到函数参数或函数本身,并将useCapture行放在不同的地方(.bind(this)之前/之后),但无济于事。事件监听器要么持续存在(并累积在removeEventListener()上),要么在某些尝试中似乎没有添加

setTimeout()

任何帮助都会得到hella赞赏

1 个答案:

答案 0 :(得分:2)

您应该将完全相同的功能传递给addEventListenerremoveEventListener

MyConsole.prototype.onEnter = function(callback) {
    const callCallback = function(e) {
        e.preventDefault();
        if (e.keyCode === 13 && typeof callback === "function") {
            setTimeout(function () {
                callback();
            }.bind(this), 0);
            this.textAreaInputDiv.removeEventListener("keyup", callCallbackBound, true);
        }
    };

    const callCallbackBound = callCallback.bind(this);

    this.textAreaInputDiv.addEventListener("keyup", callCallbackBound, true);
};

事实上,arrow function之后的it does not have its own this会更好。{/ 3}}。

你可能在callback.bind(this)中意味着setTimeout,所以我也让自己解决这个问题:

MyConsole.prototype.onEnter = function(callback) {
    const callCallback = (e) => {
        e.preventDefault();
        if (e.keyCode === 13 && typeof callback === "function") {
            setTimeout(callback.bind(this), 0);
            this.textAreaInputDiv.removeEventListener("keyup", callCallback, true);
        }
    };

    this.textAreaInputDiv.addEventListener("keyup", callCallback, true);
};