2009-11-10 7 views
13

私のサイトでは、文書全体のキー押しイベントハンドラを登録しました。ただ1つの要素のJQueryキー押しイベントを無効にするには?

$(document).keypress(myhandler); 

私はリストをスクロールするために 'スペース'キーを処理します。

問題は、<input type='text' />要素があり、入力に入力されたときにリストをスクロールするために「スペース」キー押しをしたくないということです。

JQueryによってハンドラに渡された "event"オブジェクト内の情報が見つかりませんでした。

答えて

18

を行うには、入力フィールドに別のイベントハンドラをアタッチし、このハンドラにイベントの伝播を停止することができます:

jQuery('#input-field-id').bind('keypress', function(e) { 
    e.stopPropagation(); 
}); 

このようにして、グローバルイベントハンドラをそのまま残すことができます。もっときれいになるかもしれない。

+0

きれいです。 – HRJ

+2

'e.stopPropagation();の代わりに ' e.preventDefault(); 'を使用してください。 –

3

あなたはevent.target.idを探しています。これはイベントが発生した要素のIDになります。だから、myhandlerの内側には、次の

function myhandler(e) { 
    if (e.target.id !== 'id of input') { 
     /* rest of event handler */ 
    } 
} 
+0

That Works!ありがとう! – HRJ

1

ようなものが必要でしょうevent orderについてQuirksModeのドキュメントを参照してください、そして特にブラウザ固有のあるイベントを、無効にする方法について。引用:完全なクロスブラウザの経験のために

はまた

function doSomething(e) 
{ 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
関連する問題