【发布时间】:2011-07-04 21:19:03
【问题描述】:
我有一些 jQuery 代码可以根据用户输入 as per a previous question 聚焦 <select> 下拉列表。这里是:
HTML
<select id="poetslist">
<option value="shakespeare" data-initial="WS">William Shakespeare</option>
<option value="milton" data-initial="JM">John Milton</option>
<option value="keats" data-initial="JK">John Keats</option>
<option value="wordsworth" data-initial="WW">William Wordsworth</option>
<option value="larkin" data-initial="PL">Phillip Larkin</option>
</select>
JavaScript
$("#userlist").keypress(function (e) {
initials += String.fromCharCode(e.which).toUpperCase();
// when the relevant initials are typed, select that item
$(this).find("option").filter(function () {
return $(this).attr("title").toUpperCase().indexOf(initials) === 0;
}).first().attr("selected", true);
$('#book_results').html(loading_img); // Show 'loading' gif
// Then use get_books function to update some HTML on the page with relevant info
get_books($(this).find("option").filter(function () {
return $(this).attr("title").toUpperCase().indexOf(initials) === 0;
}).first().val(), null, null);
if (timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(function () {
timer = null;
initials = "";
}, 2000); // Max 2 second pause allowed between key presses
return false;
});
这是非常有前途的,但我发现当用户键入例如首先选择“WW”,“William Shakespeare”,页面上的所有 HTML 都会为他更新,只有几秒钟后,下拉菜单才会“赶上”并更新“William Wordsworth”。
我确定这是我没有正确处理事件流的错,但是有人可以提出解决办法吗?注:我不能保证每件商品都有两个首字母。
感谢您帮助 JavaScript 新手!
【问题讨论】:
标签: javascript jquery