簡體   English   中英

刪除EventListener不起作用-Javascript

[英]Removing EventListener isn't working - Javascript

我有一個檢查用戶名的功能。 按下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));

有任何想法嗎?

removeEventListener的第二個參數必須是您要刪除的函數

您正在向它傳遞一個新功能 ,該功能與您要刪除的功能具有相同的作用。

這應該做的工作:

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

語法()=>{}創建一個新函數。 因此,您要將通過雙箭頭語法創建的兩個不同的匿名函數傳遞給addEventListenerremoveEventListener ,而它們應該是相同的。 您可以這樣修復:

const fn =  event => checkUserName(event);
window.addEventListener("keypress", fn );
window.removeEventListener("keypress", fn);

但是由於外部功能與內部功能相同,因此可以跳過它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM