HTML选择:消除浏览器延迟按键更改?

时间:2011-09-15 17:00:27

标签: javascript html dom html-select

考虑以下HTML:

<select>
    <option>Aardvark</option>
    <option>Buffalo</option>
    <option>Camel</option>
    <option>X-ray Fish</option>
    <option>Yak</option>
    <option>Zebra</option>
</select>

在大多数浏览器中,当select元素具有焦点时,按一个键会将所选值更改为以键入的字符开头的下一个选项。例如,当上面的<select>元素具有焦点时按键盘上的“B”会将所选值更改为“Buffalo”。之后按'Z'会将值更改为“Zebra”。

但我刚刚发现,至少在我的电脑上的Firefox 6和Safari 5中,在我按下选择下一个值之前有一段延迟。在上面的具体例子中,如果我按“B”然后按下“Z”不到一秒钟,似乎没有任何事情发生。

然而,在进一步测试(使用jQuery)时,我发现Javascript事件'keydown','keyup'和'keypress'都会按照您的预期被解雇,无论您按键的速度有多快。浏览器本身只是在经过一段时间后才切换所选选项。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:3)

克隆似乎有可能。这是一个非常肮脏的黑客,但在Chrome中运行得很好:http://jsfiddle.net/pimvdb/v6qy8/2/

$('select').keyup(function() {
    var newSelect = $(this).clone(true).val($(this).val());
    $(this).replaceWith(newSelect);
    newSelect.focus();
});

答案 1 :(得分:1)

我是通过中断keyevent并在函数顶部放置RecyclerViewAdapter来实现的。我使用 Enter 键来打破延迟并提交我已输入的内容。

preventDefault()