删除所有按下的keydown事件

时间:2016-04-30 11:40:44

标签: javascript jquery

所以我有一个插件(某种灯箱/游览/图库)只需点击一下按钮即可运行,当点击该按钮时,用户可以使用键盘按键浏览插件(左侧和右侧)右上角/下一个)但是当插件到达终点(最后一张图像)并且用户在用户单击按钮时继续按下右箭头键并且插件再次运行时,将触发先前注册的按键。

有没有办法清除所有已注册的按键,如清洁chache?

// keydown part

  $('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

      }

  });

3 个答案:

答案 0 :(得分:3)

正确使用on()附加事件处理程序时,可以使用off()将其分离。如果您没有向其传递函数,它将删除该事件的所有事件处理程序:

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

当你在<body> tho上这样做时,这有点笨拙,因为你最终可能会删除不属于你的插件的其他按键处理程序。更好的选择是将特定函数传递给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()用于附加{{1}}的事件,并且不太受欢迎。

答案 1 :(得分:0)

您正在使用Jquery 它具有绑定或取消绑定事件的功能 它需要您要取消订阅的事件名称。 我建议看看this link以便更好地理解。 你可以使用类似这样的东西

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

答案 2 :(得分:0)

试试这个:

$( "#body").unbind( "keydown" );

Official documentation