输入.on('keydown')第一次不工作

时间:2013-08-08 08:44:03

标签: javascript jquery

我希望使用.on()来监听我的jquery中的输入文本的一些事件,这是我的代码,但是在第一次按下键时它没有在keydown上工作:

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

6 个答案:

答案 0 :(得分:5)

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/(查看控制台日志)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

您确定keydown无效吗?

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

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

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

答案 4 :(得分: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('...

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

答案 5 :(得分:0)

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

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);