2

当使用键盘导航到自动完成选项并点击 [enter] 时,其他浏览器(例如:Firefox 14.0.1)会触发此事件,但 chrome (21.0.1180.60 m) 不会。我正在使用 jquery 来挂钩事件:

    $('input').keydown(function (event) {
        if (event.which == 13) {
            var $txt = $(this);
            //settimeout req. for firefox to append autocomplete
            setTimeout(function () {
                //**chrome doesn't get here until you hit enter a second time
            }, 0);

        }
   });​

这里的例子:http: //jsfiddle.net/a9vbe/4/

有谁知道这里发生了什么或可能的解决方案是什么?改用 keyup 事件会“解决”问题,因为计算机比手指快,但我宁愿不这样做。最好使用 Keydown(或 Keypress)。

4

1 回答 1

3

在这样的实例中进行 keyup 并没有错,特别是因为它解决了问题。问题是数据列表填充文本框的速度不够快,以至于 keydown 事件无法触发输入事件。此时,您仍然专注于数据列表本身。这是 keyup 的好处之一的一个典型例子。

更不用说一旦用户释放一个键它就会触发自动完成,所以你不会让它触发1000 倍,因为有人无缘无故地按住“F”键。

在这样的 ajax / 自动完成情况下,我总是使用“keyup”。

于 2012-08-03T14:01:06.677 回答