考虑以下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'都会按照您的预期被解雇,无论您按键的速度有多快。浏览器本身只是在经过一段时间后才切换所选选项。
有没有办法解决这个问题?
答案 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()