2016-04-30 51 views
1

所以我有一個插件(燈箱/遊覽/畫廊的排序),它只需點擊一個按鈕即可運行,當按鈕被點擊時,用戶可以通過插件導航鍵盤按鍵(上一頁/下一頁的左右鍵),但是當插件到達最後一個圖像時,當用戶單擊按鈕並且插件再次運行時用戶繼續按下右箭頭鍵,被辭退了。刪除所有按下的keydown事件

有沒有辦法清除所有註冊的按鍵,如清潔chache?

//的keydown部分

$('body').on('keydown', function(e){ 

     /** 
     * Space key. 
     **/ 
     if(e.keyCode == 32){ 

      //run code 

     } 

     /** 
     * Arrow left key. 
     **/        
     if(e.keyCode == 37){ 

     //run code 

     } 

     /** 
     * Arrow right key. 
     **/ 
     if(e.keyCode == 39){ 

      //run code 

     } 

    }); 

回答

0

您正在使用jQuery 它有一些功能來綁定或取消綁定事件 它需要事件名稱,要退訂。 我建議看看this link以便更好地理解。 您可以使用它像這樣

if(end of the carosel){ 
$(this).unbind(your desired event) 
} 
2

正如你正確使用on()附加的事件處理程序,您可以使用off()將其卸下。如果不通過一個函數,它會刪除所有事件處理該事件:

$("body").off("keydown"); 

如你在<body>壽這樣做,這是一個有點笨拙,因爲你可能最終刪除不屬於您的插件的其他按鍵處理程序。更好的選擇是將特定函數傳遞給off(),以便只移除該處理程序。您可以構建它是這樣的:

// IIFE to encapsulate plugin variables 
(function() { 

    function keyDownHandler(e) { 
     if(e.keyCode == 39) { 
      // code... 
     }  
    } 

    // attach the handler 
    body.on('keydown', keyDownHandler); 

    // some function to handle moving through the carousel 
    function showImage() { 
     if(endOfCarousel) { 
      // remove the handler 
      body.off('keydown', keyDownHandler); 
     } 
    } 

})(); 

通過在其他的答案中提到的方式unbind()用於附有bind()事件,並且不是最優選。

+0

我這樣做,不知道爲什麼我沒有拿出這個...謝謝。我但你怎麼通過像e這樣的參數? – user759235

+0

這和你已經做的一樣,你只是在'on('keydown')'中傳遞函數的引用,而不是直接寫入它。 – Rhumborl

相關問題