删除EventListener isn';t-working-Javascript
我有一个检查用户名的函数。当按下Enter键时,用户名被调用到localstorage,然后,我希望eventListener停止。由于某种原因,它不起作用,我不明白为什么删除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) {
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的代码,因为在原始事件中
将未定义