关于Javascript的keydown事件和jQuery需要澄清

时间:2011-10-07 14:25:02

标签: jquery javascript-events keydown

我有以下jQuery代码:

$("#someTextInputID").keydown(function(event){
 console.log(event.keyCode);
 console.log("input_box.val(): "+input_box.val());
 console.log("input_box.val().length: "+input_box.val().length);
})

让我感到困惑的是,如果我输入“750”,则会记录三个keyCodes,但在输入上面的字符串后我也会在我的控制台中显示:

  

input_box.val():75

     

input_box.val()。length:2

最后一个字符即“0”会发生什么?

2 个答案:

答案 0 :(得分:6)

很简单,在.value事件发生前,最后一次按键不在input的{​​{1}}。

按键时的事件顺序为:

  1. keyup(每次按键时最多触发一次,密钥在keydown中可用,但在event.which中不可用)
  2. .value(每次按键时至少触发一次(例如,如果您按住该键),密钥在keypress中可用,但在event.which中不可用)
  3. .value(每次按键时最多触发一次,密钥在keyup中可用,event.which中)
  4. 您可以通过检查.value对象的which属性并使用String.fromCharCode来检测keydownkeypress阶段期间按下了哪个键方法

    您可以使用的另一个有用技巧是使用Event,但传递值setTimeout作为延迟。延迟0会将回调添加到callstack的后面,这会延迟执行足够长时间以使0更新。:

    .value

答案 1 :(得分:1)

使用此

$("#someTextInputID").keyup(function(event){
 console.log(event.keyCode);
 console.log("input_box.val(): "+input_box.val());
 console.log("input_box.val().length: "+input_box.val().length);
})