Javascript JS-选择输入字段后禁用Eventlistener

Javascript JS-选择输入字段后禁用Eventlistener,javascript,Javascript,我当前正在向文档中添加EventListener。使用以下代码,这项功能非常有效: document.addEventListener('keydown', function(event) { if(event.keyCode === 68){ socket.emit('keyPress', {inputId: 'right', state: true}); } else if(event.keyCode === 83){ socket.

我当前正在向文档中添加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});
    }
});
但一旦我选择一个输入字段并键入包含W、a、S、D的内容,就会触发EventListener


选择输入字段后,是否有方法禁用eventListener?

您需要禁用输入中的事件冒泡。大概是这样的:

input.addEventListener('keyup', function (e) {

  e.stopPropagation();

}, false);
input.addEventListener('keydown', function (e) {

  e.stopPropagation();

}, false);

因此,使用上面的代码,您将禁用
keyup
keydown
事件冒泡,并且输入的任何父节点都不会听到这些事件

您需要禁用输入中的事件冒泡。大概是这样的:

input.addEventListener('keyup', function (e) {

  e.stopPropagation();

}, false);
input.addEventListener('keydown', function (e) {

  e.stopPropagation();

}, false);
因此,使用上面的代码,您将禁用
keyup
keydown
事件冒泡,并且输入的任何父节点都不会听到这些事件

是检查是什么,如果是您的输入元素,只需返回,如果不是,则让代码继续

document.addEventListener('keydown', function(event) {
  if(event.target === someReferenceToYourElement){
     return;
  }
  //rest of code
});
是,检查是什么,如果是您的输入元素,只需返回,如果不是,则让代码继续

document.addEventListener('keydown', function(event) {
  if(event.target === someReferenceToYourElement){
     return;
  }
  //rest of code
});

您可以在输入的焦点上添加事件侦听器

document.getElementsByTagName('input').addEventListener('focus', function(e) {
    e.StopPropagation();
}

您可以在输入的焦点上添加事件侦听器

document.getElementsByTagName('input').addEventListener('focus', function(e) {
    e.StopPropagation();
}

我建议你这样做:

$('document').keypress(function(event) {
    if (event.which == 65) { // A
        // Do your stuff
    }
})
此代码与您的相同,但位于整个DOM上

$('#input').val.indexOf('a')
此代码将检查您的字段是否包含字母A,可以是字符串“abcd”或“bar”等


如果要检查字段何时失去焦点,还可以检查jquery的事件模糊,我建议您这样做:

$('document').keypress(function(event) {
    if (event.which == 65) { // A
        // Do your stuff
    }
})
此代码与您的相同,但位于整个DOM上

$('#input').val.indexOf('a')
此代码将检查您的字段是否包含字母A,可以是字符串“abcd”或“bar”等


如果要检查字段何时失去焦点,还可以检查jquery的事件模糊

如何检查keyup/keydown监听器中的焦点?可能会添加一个类,如
.ignoreInput
,您可以将其添加到元素中,然后检查当前关注的元素是否具有类似
document.activeElement
的类(假设您希望侦听器在输入模糊后重新开始工作)
input.addEventListener('focus',function(){document.removeEventListener('keydown'..
?检查keyup/keydown监听器内部的焦点如何?也许可以添加一个类,如
.ignoreInput
,您可以将其添加到元素中,然后检查当前焦点元素是否具有类似
document.activeElement
的类(假设您希望侦听器在输入模糊后重新开始工作)
input.addEventListener('focus',function(){document.removeEventListener('keydown'..
?这符合我的要求。如果选择了输入,我需要禁用多个eventlistener。只是一个问题,如果我们仍然希望启用一个侦听器但禁用其他侦听器,该怎么办?这符合我的要求。如果选择了输入,我需要禁用多个eventlistener。只是一个问题,如果我们仍然希望启用一个侦听器但禁用ot,该怎么办她的?这就是我要找的。这样你可以检查目标是否是输入元素并返回,这样你就不需要知道任何关于输入元素的信息。这就是我要找的。这样你可以检查目标是否是输入元素并返回,这样你就不需要知道任何关于输入元素的信息。