2

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

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

6 回答 6

6

keydown 事件被触发,但此时尚未添加角色。所以检查值是否为空是行不通的。你应该尝试这样的事情:

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

有关 keydown 和 keyup 值的演示,请查看http://jsfiddle.net/vtUdE/(查看您的控制台日志)

于 2013-08-08T09:48:20.337 回答
3

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

$(s.join(", ")).on('keyup paste change focus blur keydown', function(e) {
    setTimeout(function() {
        if($(e.target).val()!='')
           console.log(e.which); 
    },1);
});
于 2013-08-08T17:19:03.797 回答
0

根据您上面的评论:

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 应该有引号。因此,您的选择应如下所示:

$("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('...

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

于 2013-08-08T10:00:21.247 回答
0

你确定这keydown不起作用吗?

试试这个并将结果写给我们

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

这是一个小提琴:http: //jsfiddle.net/3F9FP/

于 2013-08-08T08:52:59.387 回答
0

您可以尝试使用 keypress() 代替:

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

确保您的选择器 $(s.join(", ")) 返回一个元素(非空)

于 2013-08-08T08:49:04.423 回答
0

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

HTML:

<input type="text" name="text-input" value="" />

Javascript:

function handleInput(e) {
  console.log(e.target.value)
}

const textInput = document.querySelector("input[name='text-input']");
textInput.addEventListener("input", handleInput);
于 2019-12-21T17:35:33.043 回答