2

重複の可能性:
本文にはJavascriptイベントハンドラーがありますが、入力にはありません

キーダウンイベントをリッスンする短いスクリプトを作成しましたが、テキストフィールドに入力している場合は無視したいと思います。

入力の1つに焦点が当てられているかどうかを確認するなど、奇妙なトリックなしでそれを行う方法がわかりません。

これが今の私のコードです。

document.addEventListener('keydown', function(event) {
    if(event.keyCode == 71) {
        showSelected();
    }
    else if(event.keyCode == 13) {
        closeModal();
    }
});
4

2 に答える 2

4

contenteditableこれは、 (ユーザーがページ上で必要なdiv / spans / box内にテキストを書き込めるようにするなど)何かをしている場合は少し注意が必要です。

もしそうなら、これは少し考えてやり直す必要があります(それはそれほど難しいことではありません-ただもっと複雑です)。

ただし、除外するタイプのリストに対して、event.targetそのプロパティ(イベントが発生している要素)を確認できます。tagName

function keyEvent (evt) {
    var key = evt.keyCode,
        el = evt.target,
        type = el.tagName.toLowerCase();
        // tag names are upper-case... almost always...
        // so convert one way or the other, to be sure  
    if (type === "input" || type === "textarea") { return; }
    /* do whatever you were going to do */
}

このソリューション(およびこれまでのコード)はゲットー-IEと互換性がないことにも注意する必要があります。そのためには、と/関数パラメータをサポートしていないためattachEventwindow.eventとプロパティを操作する必要があります。window.event.srcElementaddEventListenereevent

于 2012-09-17T16:20:54.473 に答える
1

確認するだけですevent.target

{ 
   if (event.target.tagName.toUpperCase() == 'INPUT') return false;

    // Do your Coding
}
于 2012-09-17T16:35:20.827 に答える