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

发布于 2024-12-08 19:41:53 字数 421 浏览 0 评论 0原文

我有以下 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”,则会记录三个 keyCode,但在输入上面的字符串后,我也在控制台中得到了这个:

input_box.val(): 75

input_box.val().length: 2

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

I have the following jQuery code:

$("#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);
})

What puzzles me is that if I type in "750", three keyCodes are logged but I also get this in my console after having typed the string above:

input_box.val(): 75

input_box.val().length: 2

What happens then with the last character i.e. "0"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ゞ花落谁相伴 2024-12-15 19:41:53

非常简单,直到 keyup 事件发生之前,最后按下的键并不在 input.value 中。

按下按键时事件的顺序为:

  1. keydown(每次按键最多触发一次,key 在 event.which 中可用,但在 .value 中不可用)
  2. keypress (每次按键至少触发一次(例如,如果按住该键),key 在 event.which 中可用,但在 <代码>.value)
  3. keyup (每次按键最多触发一次,按键在event.which中可用,.value中)

您可以检测按下了哪个键在 keydownkeypress 阶段,通过检查 < Event 的 code>which 属性对象,并使用 String.fromCharCode 方法。

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

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

    setTimeout(function () {
        console.log(that.value); // will record value
    }, 0);
})    

Quite simple, the last key pressed is not in the .value of an input until the keyup event.

The order of events when pressing a key is:

  1. keydown (fires at most once per key press, key is available in event.which, but not in .value)
  2. keypress (fires at least once per key press (e.g. if you hold the key down), key is available in event.which, but not in .value)
  3. keyup (fires at most once per key press, key is available in event.which, and in .value)

You can detect which key was pressed during the keydown or keypress phase by examining the which property of the Event object, and using the String.fromCharCode method.

Another useful trick you can employ is to use setTimeout, but pass a value of 0 as the delay. A delay of 0 adds the callback to the back of the callstack, which delays the execution long enough for the .value to update.:

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

    setTimeout(function () {
        console.log(that.value); // will record value
    }, 0);
})    
我要还你自由 2024-12-15 19:41:53

用这个

$("#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);
})

Use this

$("#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);
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文