2017-07-04 13 views
0

にあるとき、私は以下のコード使用していない:私が欲しいものキー押下が、入力またはテキストエリアにフォーカス

$(document).keypress(function (e) { 
    if (e.which === 68 || e.which === 100) { 
     doStuff(); 
    } 
}); 

は私のページ内の機能へのショートカットとしてキー「D」を取得することです。問題は、このページには入力とテキストエリアのコントロールがあり、このコントロールをタイプすると 'doStuff()'関数が呼び出されます。

どうすればよいですか?ユーザーが編集可能なコントロールに何も入力していない場合にのみ、キー「D」キャプチャが必要です。

ありがとうございます!

e.targetに代わり
+2

... – Rayon

答えて

2

現在の能動素子は、入力またはテキストエリアであれば、あなたがテストすることができ:

$(document).keypress(function (e) { 
    var focussedTag = document.activeElement && document.activeElement.nodeName; 
    if(focussedTag === 'INPUT' || focussedTag === 'TEXTAREA') { 
    return; 
    } 
    if (e.which === 68 || e.which === 100) { 
    doStuff(); 
    } 
}); 

フィドル:https://jsfiddle.net/e1qtapo6/

+0

方法のcontentEditable divのでしょうか? – Durga

+1

@Durgaあなたのためにフィドルを更新しました:https://jsfiddle.net/e1qtapo6/1/ – alex3683

1

は「doStuff」関数を実行する前に別のチェックを追加します。ユーザーにフォーカスがある入力要素があるかどうかをチェックし、trueの場合はステートメントのみを実行します。このような

何か:

$(document).keypress(function (e) { 
    if ((e.which === 68 || e.which === 100) && (!$(input).is(":focus"))) { 
     doStuff(); 
    } 
}); 
1
$(document).on('keypress', ':not(:input)', function (e) { 
    if (e.which === 68 || e.which === 100) { 
     doStuff(); 
    } 
}); 
1

もう一つ - あなたは `e.target`をテストすることができ

$(document).keypress(function (e) { 
    if (e.which === 68 || e.which === 100) { 
     var _node = e.target.nodeName; 
     if(_node !== "INPUT" && _node !== "TEXTAREA"){ 
      doStuff(); 
     } 
    } 
    }); 
関連する問題