簡體   English   中英

removeEventListener和帶參數的匿名函數

[英]removeEventListener and anonymous function with arguments

我有一個文本輸入,其中添加了一個事件偵聽器。 此事件偵聽器通過onkeyup執行匿名功能。 這個匿名函數包含一個foo函數。 此foo函數具有一個參數number用於在控制台中顯示數字。

我有一個用於刪除事件監聽器的按鈕。 但是,當我單擊此按鈕並輸入文本輸入時,不會刪除事件偵聽器,因此foo函數在控制台中再次顯示數字。

這里的代碼,很簡單:

<input type="text" value="" id="input_text">

<input type="button" value="Remove Event Listener" onclick="deleteEventListener();">

<script type="text/javascript">

number = 0;

//Function to display number in console :
function foo(arg_number)
{
    number = arg_number+1;

    console.log(number);    
}

//The text input :
input_text = document.getElementById("input_text");

//Add event listener to the text input :
input_text.addEventListener("keyup", function(){foo(number);}, false);

//Function to remove event listener :
function deleteEventListener()
{
    input_text.removeEventListener("keyup", function(){foo(number);}, false);   
}

你可以嘗試一下: https : //jsfiddle.net/5LtmLzqy/

你有主意嗎? 在此先感謝您。

它可以通過實現arguments.callee ,的存儲值arguments.callee在全局范圍JavaScript變量,並通過這個值作為一個參數removeEventListener()

   number = 0;
    var myAnonymous = null;
    //Function to display number in console :
    function foo(arg_number) {
        number = arg_number + 1;
        console.log(number);
    }

    //The text input :
    input_text = document.getElementById("input_text");

    //Add event listener to the text input :
    input_text.addEventListener("keyup", function () { myAnonymous = arguments.callee; foo(number); }, false);

    //Function to remove event listener :
    function deleteEventListener() {
        if (myAnonymous != null)
            input_text.removeEventListener("keyup", myAnonymous);
    }

只需將您的函數設為外部函數即可。

w3schools

注意:要刪除事件處理程序,用addEventListener()方法指定的函數必須是外部函數,如上面的示例(myFunction)。

匿名函數,例如element.removeEventListener("event", function(){ myScript }); 不管用。

暫無
暫無

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

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