Javascript input.on(';键下';)第一次不工作

Javascript input.on(';键下';)第一次不工作,javascript,jquery,Javascript,Jquery,我想使用.on()来监听jquery中输入文本的某些事件,这是我的代码,但在我第一次按下某个键时,它对keydown不起作用: $(s.join(", ")).on('keyup paste change focus blur keydown', function(e) { if($(e.target).val()!='') console.log(e.which); }) 您可以尝试改用keypress(): $(s.join(", ")).keypress(functi

我想使用
.on()
来监听jquery中输入文本的某些事件,这是我的代码,但在我第一次按下某个键时,它对keydown不起作用:

$(s.join(", ")).on('keyup paste change focus blur keydown', function(e)
{
   if($(e.target).val()!='')
       console.log(e.which);
})

您可以尝试改用keypress():

$(s.join(", ")).keypress(function(e) {
  console.log(e.which);
});

确保选择器$(s.join(“,”)正在返回一个元素(非空)

是否确定
keydown
不起作用

试试这个,把结果写下来

console.log(e.type+':'+e.which)


下面是一个例子:

会触发keydown事件,但此时角色尚未添加。因此,检查该值是否为空是行不通的。您应该尝试以下方法:

$(s.join(", ")).on('keyup paste change focus blur keydown', function(e)
{
if($(e.target).val()!='' || e.type == 'keydown')
    console.log(e.which);
})
$("input[data-input_id='topNavigBar_SearchInput'], input[data-input_id='drawer_popup_SearchInput'], input[data-input_id='setdevice_popup_renameInput'], input[data-input_id='has_holdertext']").on('...

要查看keydown和keydup的值的演示,请检查(查看控制台日志)

上面的注释:

input[data-input_id=topNavigBar_SearchInput], input[data-input_id=drawer_popup_SearchInput], input[data-input_id=setdevice_popup_renameInput], input[data-input_id=has_holdertext]
在这些选择器中,ID周围应该有引号。因此,您的选择应如下所示:

$(s.join(", ")).on('keyup paste change focus blur keydown', function(e)
{
if($(e.target).val()!='' || e.type == 'keydown')
    console.log(e.which);
})
$("input[data-input_id='topNavigBar_SearchInput'], input[data-input_id='drawer_popup_SearchInput'], input[data-input_id='setdevice_popup_renameInput'], input[data-input_id='has_holdertext']").on('...

尝试像我在这里发布的那样对选择器进行编码,看看事件处理程序是否工作。

我认为这是解决方案,只需要一些睡眠(它工作:-O):


在vanilla javascript中,您可以将“input”事件附加到输入字段并立即获取值

HTML:


您连接事件处理程序的方式似乎很好,我打赌您的选择器将与您的文本框不匹配。您能告诉我们
s
的值吗?
console.log(s.join(“,”)
并告诉我们发生了什么我在s中推了一些选择器:
s.push('input[data-input\u id=firstId'),它可以与keyup粘贴焦点模糊配合使用。。。但问题是keydown,它起作用,但一开始不起作用time@PatsyIssa结果:[13:20:49.286]“输入[data-input\u id=topNavigBar\u SearchInput],输入[data-input\u id=drawer\u popup\u SearchInput],输入[data-input\u id=setdevice\u popup\u renameInput],输入[data-input\u id=has\u holdertext]。”这不是我想要的,我使用了类似的东西,但是当输入为空时,你按下
Backspace
它会触发:
vl=$(e.target).val();if(e.type=='keydown'){vl+=String.fromCharCode(e.keyCode);}if((vl!=''){//somecode}
它不是id!它是数据,处理得很好,问题不在于你有没有努力编码它?我认为这是解决方案,它只需要一些睡眠(它正在工作:-O):
$(s.join(,))。on('keyup paste change focus blur keydown',function(e){setTimeout(function(){if($(e.target).val()!='')console.log(e.which);},1);
无论您检查哪个属性,内部条件总是有引号!这与giorgio的没有什么不同,只是它有一个糟糕的setTimeout()实现每毫秒调用一次该函数也是如此。不!这太不一样了,当您的网页中有一个字段并且浏览器为建议保存了该字段的值时,当该字段已由浏览器填充时,没有事件发生,因为浏览器填充该字段比运行任何脚本都要早。
function handleInput(e) {
  console.log(e.target.value)
}

const textInput = document.querySelector("input[name='text-input']");
textInput.addEventListener("input", handleInput);