jquery keyup错过了一个转移+>关键事件,如果我真的很快

时间:2012-01-19 00:02:18

标签: jquery

每当我输入>时,跟随jquery代码就会将输入元素的值移动到输出元素:

$(document).ready(function() {
  var input = $("#input");
  var output = $('output[name="output"]')[0];
  input.keyup(function(event) {
    if (event.which == 190 && event.shiftKey == true) {// 190 = key code
      output.value = input.val();
    }
  });
});

但是,如果我真的要快,那么事件处理程序会错过>或者两个,即使它在输入框中正确捕获。我的代码中有缺陷吗?

1 个答案:

答案 0 :(得分:0)

我实际上无法重现您的确切错误,但我感觉您所看到的是您输入'>'之间的滞后时间。字符和事件处理程序执行的时间。我正在使用2个输入框,类型=“text”,以及以下JS代码:

$(document).ready(function() {
    var input = $("#input"),
        output = $('#output');
    input.keyup(function(event) {
        if (event.which == 190 && event.shiftKey == true) {// 190 = key code
            output.val(input.val());
        }
    });
});

当我快速输入字符时,我有时会看到输出框得到最后一个'>'角色加上几个额外的击键。击键甚至可以是删除最后一个'>'的退格键。

对我来说,不是简单地拉动input.val(),而是想要将输入值拉到最后一个'>'角色,使用如下内容:

input.keyup(function(event) {
    if (event.which == 190 && event.shiftKey == true) {// 190 = key code
        var val = input.val(),
            lastIndex = val.lastIndexOf('>');
        output.val(val.substr(0, lastIndex+1));
    }
});

这里有关于lastIndexOf的一些文档,包括一个没有本机浏览器的解决方法: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf