以前曾多次询问过,但我所看到和试过的所有人都不知道,或者似乎因为某些原因而无法工作
onEnter接受一个回调,只要按下回车键就会触发(这很有用),但当我尝试拨打MouseEvent
时,它似乎无法正常工作。我已尝试将该功能变为变量而非声明,我已尝试为添加/删除设置removeEventListener()
标记,并且我已尝试尝试{{{{{{ 1}}到函数参数或函数本身,并将useCapture
行放在不同的地方(.bind(this)
之前/之后),但无济于事。事件监听器要么持续存在(并累积在removeEventListener()
上),要么在某些尝试中似乎没有添加
setTimeout()
任何帮助都会得到hella赞赏
答案 0 :(得分:2)
您应该将完全相同的功能传递给addEventListener
和removeEventListener
。
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);
};