2012-01-26 8 views
2

https://github.com/keithamus/jwertyjwertyキーバインド解除

は、誰もが結合.KEYを設定した後バインド解除する方法を知っていますか?試験として

、私は、そのオブジェクトが選択されていないとき、何かが、その後

jwerty.key('↑', function(e) { e.preventDefault(); alert('up'); });

結合していないが選択されている場合、これはグローバルに設定します。私はjwertyのバインドを解除する必要がありますが、その方法を理解することはできませんが、その項目は、未選択のステートメント内に既に設定されています。

私はa)明示的にバインドを解除する方法がわからない場合、またはb)別の匿名関数に変更しようとすると、警告が表示されます。あなたが削除することができ、グローバルキーハンドラをしたい場合は

+0

があなたをした:

$(document.body).unbind('keydown.jwerty'); 

namespaces in jqueryの使用についてのクールなことは、あなたもこれを行うことによって、すべてのjwertyイベントをバインドすることができるということです私の答えを見ますか?あなたが必要とすることはしませんか? –

答えて

4

、あなたはキーハンドラは、HTML要素にスコープしたい場合は、設定する必要がjQueryのhttp://jsfiddle.net/mendesjuan/LxQ4H/2/

function doit() { 
    alert('up'); 
} 
// to bind use namespaces so it can be unbound without removing 
$(document.body).bind('keydown.test', jwerty.event('↑', doit)); 

// a button that unbinds the key handler 
$('#btn').click(function(){ 
    $(document.body).unbind('keydown.test') 
}); 

を使用して、それをバインドする必要がありますエレメント上のリスナー。グローバルではありません。これは、バインドされた要素にフォーカスがある場合にのみ発生します。ちょうどあなたの要素がデフォルト(DIV)でフォーカスを取らない場合は、次の作業を実行して、それをフォーカス可能にする必要がありhttp://jsfiddle.net/mendesjuan/LxQ4H/

jwerty.key('⌃+⇧+P/⌘+⇧+P', function() { [...] }, this, '#myinput'); 

その要素へのローカルのショートカットをバインドするためにセレクタを渡します。 http://jsfiddle.net/mendesjuan/LxQ4H/1/

// or 0, 1,2 3 if you want it to be tabbable 
document.getElementById('#mydiv').tabIndex = -1; 

これらのコードサンプルは、https://github.com/keithamus/jwerty(すでに述べた同じリンク)から来た

+0

ありがとう!私はあなたがネームスペースにバインドできることを知らなかった、その岩! –

3

フアン・メンデスが述べたようにあなたは、jQueryの利用可能な場合は、jwerty.eventで、jQueryのbind()メソッドを使用することができます。

しかし、これを解決する別の方法があります。提供した現在のコードを使用する。

jwerty.key('↑', function(e) { e.preventDefault(); alert('up'); }); 

jwertyの内部はあなたのために、バインドを行いますが、特別な「keydown.jwerty」名前空間の下に追加されます。 (See this line of the codebase)。だから、あなたが既に持っている次のコードは、あなただけこれを実行する必要があります。

$(document.body).unbind('.jwerty'); 
+0

e.preventDefault()を使用することは避けることができます。ドキュメントに書かれているように、単にjwerty.key( '↑'、false)を使うことができます。前。 – wahrheit

関連する問題