Javascript keyup / onkeyup错误的元素

时间:2016-03-22 13:01:29

标签: javascript jquery keyup onkeyup

是否有人遇到同样的问题? 当快速键入文本框并跳到下一个文本框时(通过按下'选项卡键),键盘事件将从错误的元素中注册。

行为:

  1. 前提条件:我们有两个文本框; javascript注册了关键事件
  2. 操作:在文本框中键入quicky,然后使用'标签切换到下一个文本框'键。
  3. 结束情况:所有按下的字符都在第一个文本框中呈现,第二个文本框被选中(但为空); Javascript keyup事件记录最后一个元素的最后一个x(取决于类型速度)。(意外)
  4. 预期结束情况:
    - 所有按下的字符都在第一个文本框中呈现,第二个文本框被选中(但为空); Javascript:只从最后一个元素注册了最后一个(' tab' keyup事件)。

    (这个问题在普通的javascript中,但也传播到jQuery onkeyup事件)

    在浏览器中测试: - Chrome(版本49.0.2623.87米(64位)) - FireFox(45.0.1) - 边缘

    JSFiddle:https://jsfiddle.net/xk09542f/4/

    JS:

    document.getElementById('inp1').onkeyup = function(e) {
         console.log(this.id + ' ' + e.which);
    }
    document.getElementById('inp2').onkeyup = function(e) {
      console.log(this.id + ' ' + e.which);
    }
    

    HTML:

    <input id="inp1" type="text">
    <input id="inp2" type="text">
    

    输出:见控制台;

1 个答案:

答案 0 :(得分:1)

实际上,您在控制台中看到的是预期结果,因为: 当你按Tab键时它的句柄2事件首先是keyDown(它将移动你到第二个textField)现在你在第二个textField中你仍然在keyDown事件下,所以当你释放tab键时它处理你的keyUp事件和这个最后一个事件发生在第二个textField上。