2016-05-03 17 views
0

JavaScriptでは、いくつかのキーの押下を検出したいと思います。しかし、私はいくつかの種類のテキスト入力エリアに入力している間にユーザーが行うキー押下を無視したい。それをどうすれば実現できますか?JavaScriptでのテキスト入力要素の検出

私はこれら二つの要素に働く

if (document.activeElement.nodeName == 'INPUT') { 
    return; 
} 
if (document.activeElement.nodeName == 'TEXTAREA') { 
    return; 
} 

を試してみました。たとえば、Inbox by Gmailのemail-compose要素はDIVコンテナです。しかし、すべてアクティブなDIVを除外したいですか?キー入力を取得するために使用される他のHTML要素はありますか?私が見落とした可能性のある方法はありますか?

+2

あなたは要素が同様に 'contentEditable'であるかどうかを確認する必要があります。 https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/contentEditable –

+1

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/isContentEditable – Teemu

+0

@Teemu : 'isContentEditable'がないことを知っていました:-o –

答えて

0

まず、jqueryを使用してイベントを正規化します。そこから、$(event.target).is()を試してみてください:

ここには、すべてのイベントがキャプチャされるdivがある例があります。他の人はそうではありません<input>要素のためのイベントは<textarea>のイベントを含め、無視されます。

$('#mydiv').keypress(function(event) { 
 
    if ($(event.target).is('input')) { 
 
    return true; 
 
    } else { 
 
    console.log('not an input box'); 
 
    return false; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="mydiv"> 
 
    <input> 
 
    <span>Spanning area</span> 
 
    <textarea></textarea> 
 
</div>

+1

jqueryを使用する利点はありますか?私の質問のコードができないことは何ができますか?また、私の質問は、あなたの答えが関係しない 'input'と' textarea'以外のテキスト入力を使う他の要素を検出することでした(上記のコメントはそれを解決するために 'isContentEditable'を示しています)。 – bers

+0

jqueryの使用には(少なくとも)2つの利点があります。まず、従来のJavaScriptよりもはるかに簡潔で、はるかに強力です。第二に、おそらくもっと重要なのは、jqueryドキュメントに忠実に従えば、ブラウザ間の問題について(それほど)心配する必要はありません。イベントは依然としてブラウザ間で一貫して実装されておらず、jqueryはイベントを1つの標準に「標準化」するために多くの作業を行います。あなたの2番目の質問:あなたはif()文のテストでそれらを組み合わせるだけで、inputとtextarea以外の要素を検出することができます。私はデモのために入力イベントだけをキャプチャしました。 –

+0

説明をありがとう。それでも、あなたは私の質問を最後まで読んでいないと感じています。私は 'if'をどのように組み合わせるかを知っています。 – bers

関連する問題