删除EventListener isn';t-working-Javascript

删除EventListener isn';t-working-Javascript,javascript,Javascript,我有一个检查用户名的函数。当按下Enter键时,用户名被调用到localstorage,然后,我希望eventListener停止。由于某种原因,它不起作用,我不明白为什么 var checkUserName = function(event) { let key = event.which || event.keyCode; if (key === 13) { if (this.usernameInput.value.length <= 0) {

我有一个检查用户名的函数。当按下Enter键时,用户名被调用到localstorage,然后,我希望eventListener停止。由于某种原因,它不起作用,我不明白为什么

var checkUserName = function(event) {

    let key = event.which || event.keyCode;

    if (key === 13) {
        if (this.usernameInput.value.length <= 0) {
            throw new Error("Username to short!")
        } else if (/\s/g.test(this.usernameInput.value)) {
            throw new Error("No white spaces, please!")
        } else if (this.usernameInput.value.length > 30) {
            throw new Error("Username to long!")
        } else {
            localStorage.setItem("username", JSON.stringify(this.usernameInput.value));
            this.usernameInput.value = "";
        }
    }
}.bind(this);

window.addEventListener("keypress", initiate => checkUserName(event));
window.removeEventListener("keypress", initiate => checkUserName(event));
var checkUserName=函数(事件){
让key=event.which | | event.keyCode;
如果(键===13){
if(this.usernameInput.value.length 30){
抛出新错误(“用户名变长!”)
}否则{
setItem(“username”,JSON.stringify(this.usernameInput.value));
this.usernameInput.value=“”;
}
}
}.约束(本);
addEventListener(“按键”,initiate=>checkUserName(事件));
removeEventListener(“按键”,initiate=>checkUserName(事件));

有什么想法吗?

removeEventListener的第二个参数需要是要删除的函数

您正在向它传递一个新函数,该函数的作用与要删除的函数相同

这应该可以做到:

window.addEventListener("keypress", checkUserName);
window.removeEventListener("keypress", checkUserName);
语法
()=>{}
创建一个新函数。因此,您将通过双箭头语法创建的两个不同的匿名函数传递给
addEventListener
removeventlistener
,而它们应该是相同的。您可以这样修复:

const fn =  event => checkUserName(event);
window.addEventListener("keypress", fn );
window.removeEventListener("keypress", fn);
但由于外部函数与内部函数的作用相同,因此可以跳过它:

window.addEventListener("keypress", checkUserName);
window.removeEventListener("keypress", checkUserName);

考虑到ES6语法,将
var
替换为
const
将是一个好主意。您还修复了op的代码,因为在原始
事件中
未定义