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

bal*_*teo 0 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);
})
Run Code Online (Sandbox Code Playgroud)

让我感到困惑的是,如果我键入"750",则会记录三个keyCodes,但在键入上面的字符串后,我也会在我的控制台中获取此代码:

input_box.val():75

input_box.val().length:2

那么最后一个字符即"0"会发生什么?

Mat*_*att 6

很简单,最后按下的键不在.valueinput,直到keyup事件.

按键时的事件顺序为:

  1. keydown(每次按键最多触发一次,按键可用event.which,但不能进入.value)
  2. keypress(火灾每个按键至少一次(例如,如果你按住键),关键是在使用event.which,但不是在.value)
  3. keyup(每按一次按键最多触发一次,按键可用event.which,并且 在中.value)

您可以通过检查对象的属性并使用该方法来检测在该阶段keydownkeypress阶段中按下了哪个键.whichEventString.fromCharCode

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

$("#someTextInputID").keydown(function(event){
    var that = this;

    setTimeout(function () {
        console.log(that.value); // will record value
    }, 0);
})    
Run Code Online (Sandbox Code Playgroud)