Javascript HTML选择:消除按键更改时的浏览器延迟?
考虑以下HTML:Javascript HTML选择:消除按键更改时的浏览器延迟?,javascript,html,dom,html-select,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>Zebr
<select>
<option>Aardvark</option>
<option>Buffalo</option>
<option>Camel</option>
<option>X-ray Fish</option>
<option>Yak</option>
<option>Zebra</option>
</select>
土豚
水牛
骆驼
X射线鱼
牦牛
斑马
在大多数浏览器中,当select元素具有焦点时,按下一个键会将选定值更改为以键入的字符开始的下一个选项。例如,当上面的
元素具有焦点时,按键盘上的“B”将所选值更改为“Buffalo”。然后按“Z”将值更改为“Zebra”
但我刚刚发现,至少在我个人电脑上的Firefox 6和Safari 5中,在按下选择下一个值之前有一个延迟。在上面的具体示例中,如果我在不到一秒钟的时间内按下“B”,然后按下“Z”,则似乎什么也没有发生
然而,在进一步的测试(使用jQuery)中,我发现Javascript事件“keydown”、“keyup”和“keypress”都是按照您的预期触发的,无论您按键的速度有多快。浏览器本身只是在经过一段时间后才切换所选选项
有没有办法绕过这个问题?克隆似乎是可能的。这是一个非常肮脏的黑客行为,但在Chrome中效果很好:
我是通过中断keyevent并在函数顶部放置一个
preventDefault()
来实现的。我使用回车键来打破延迟,并提交我已经键入的内容
if (eventinfo.keyCode == 13) {
eventinfo.preventDefault();
var search = document.getElementById("searchtag");
var value = search.value;
mainPage.searchAdd(value).done(
function () {
search.value = "";
search.focus();
}
);
}
浏览器可能会搜索以“BZ”开头的值(失败),而不是跳转到以“Z”开头的值。我想你可以重写关键事件并自己找到值,但这不是一个很好的解决方案。它在浏览器中的工作方式是搜索你键入的内容。如果您键入bz,它将搜索从bz开始的内容。这有助于在那些该死的三次下拉框中输入您的出生年份,因此您可以只键入1984或其他任何内容。如果您暂停片刻,浏览器会“忘记”您键入的内容,当您再次键入时,您将开始新的“搜索”。最接近实际解决方案。恭喜,您现在得到了最佳答案。而且只晚了5年。:)
if (eventinfo.keyCode == 13) {
eventinfo.preventDefault();
var search = document.getElementById("searchtag");
var value = search.value;
mainPage.searchAdd(value).done(
function () {
search.value = "";
search.focus();
}
);
}