2013-02-28 7 views
7

私は、ユーザーが削除ボタンを押したときにアクションを実行する関数(以下)を呼び出しています。それはうまく動作しているが、私はページ上でのみ行う必要があり、ユーザが入力中(入力内またはテキストエリア内)ではない。jQuery keydownでもテキストボックス内にあれば無視する

$(window).keydown(function (evt) { 
    if (evt.which == 46) { // delete 
     goDoSomething(); 
    } 
}); 

任意のアイデアhow I can amend the abovenot fireにユーザーがininputtextareaある場合は?事前に

おかげで、

デイブ

答えて

14

チェックevt.targetのタイプ:

$(window).keydown(function (evt) { 
    if (evt.target.tagName.toLowerCase() !== 'input' && 
     evt.target.tagName.toLowerCase() !== 'textarea' && evt.which == 46) { // delete 
     goDoSomething(); 
    } 
}); 
+0

うまく働いています。返信いただきありがとうございます。答えは – dhardy

+0

@dhardyと書かれています。 – karaxuna

0

あなたはグローバル変数を持っているし、テキストボックスがに焦点を当てているときに何かにそれを設定し、それをリセットすることができぼかしで。このような何か:

var textboxSelected = false; 

$(":input").focus(function() { 
    textboxSelected = true; 
}); 
$(":input").blur(function() { 
    textboxSelected = false; 
}); 

次に、あなたのOnKeyDownイベントに変数は機能の残りを実行する前に、falseに設定されているかどうかを確認します。

$(window).keydown(function (evt) { 
if (evt.which == 46 && textboxSelected == false) { 

    goDoSomething(); 
} 
}); 
0

は次のようにsometihing試してみてください。

$(window).keydown(function (evt) { 
    if(evt.target != $('input') && evt.target != $('textarea')){ 
    if (evt.which == 46) { // delete 
     goDoSomething(); 
    } 
    } 
}); 
関連する問題