現在、私はドキュメントにEventListenerを追加しています。これは次のコードを使用して素晴らしい作品:JS - 入力フィールドが選択されると、EventListenerを無効にします。
document.addEventListener('keydown', function(event)
{
if(event.keyCode === 68){
socket.emit('keyPress', {inputId: 'right', state: true});
}
else if(event.keyCode === 83){
socket.emit('keyPress', {inputId: 'down', state: true});
}
else if(event.keyCode === 65){
socket.emit('keyPress', {inputId: 'left', state: true});
}
else if(event.keyCode === 87){
socket.emit('keyPress', {inputId: 'up', state: true});
}
});
document.addEventListener('keyup', function(event)
{
if(event.keyCode === 68){
socket.emit('keyPress', {inputId: 'right', state: false});
}
else if(event.keyCode === 83){
socket.emit('keyPress', {inputId: 'down', state: false});
}
else if(event.keyCode === 65){
socket.emit('keyPress', {inputId: 'left', state: false});
}
else if(event.keyCode === 87){
socket.emit('keyPress', {inputId: 'up', state: false});
}
});
をしかし、イベントリスナーがトリガされるだろう、その後D、Iは入力フィールドを選択し、W、A、Sを含むものを入力し、一度。
入力フィールドが選択されたら、eventListenerを無効にする方法はありますか?
keyup/keydownリスナー内のフォーカスを確認するのはどうですか?おそらく、要素に追加できる '.ignoreInput'のようなクラスを追加し、現在フォーカスのある要素に' document.activeElement'のようなクラスがあるかどうかをチェックします(入力がぼやけた後にリスナーを再開させたいと仮定します) – DBS
'input.addEventListener( 'focus'、function(){document.removeEventListener( 'keydown' ....'? –