2016-04-30 10 views
1

ボタンのクリックで動作するプラグイン(ライトボックス/ツアー/ギャラリーの一種)があります。ボタンがクリックされていると、ユーザーはプラグインを使用して(前/次の場合は左右)キーボードのキーですが、プラグインが最後に来ると(最後の画像)、ユーザーがボタンをクリックしてプラグインが再び実行されたときに右矢印キーを押し続けると、解雇されます。すべての押下されたキーダウンイベントを削除します

チャチャをクリーニングするなど、登録されているキーをすべてクリアする方法はありますか?

//の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をご覧になることをお勧めします。あなたが正しく、イベントハンドラをアタッチするon()を使用するように、あなたはそれを切り離すためにoff()を使用することができます

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

Official documentation

0

のようなもの、これを試してみてください、それを使用することができます。あなたはそれに関数を渡さない場合は、そのイベントのために、すべてのイベントハンドラを削除します:

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

あなたは<body>カントーにこれをやっているとして、あなたが終わる可能性として、これは、少し重い利きですがあなたのプラグインの一部ではない他のkeypressハンドラを削除します。より良いオプションは、特定の関数を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()を添付したイベントのために使用され、あまり好ましくないれます。

2

: あなたはこの

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

私はこれを思いついたのですが、どうしてこのようなことを思い出さなかったのですか...ありがとう。私はどのようにeのようなパラメータを渡しますか? – user759235

+0

これはあなたがすでにやっているのと同じですが、関数を 'on( 'keydown')'の関数に直接渡しているだけです。 – Rhumborl

関連する問題