【发布时间】:2011-09-12 11:12:45
【问题描述】:
我正在尝试用这个来模仿 Google 建议列表:
function el(tid) {
return document.getElementById(tid);
}
function addScript(u) {
var head = document.getElementsByTagName('head')[0],
sc2 = document.createElement('script');
sc2.src = u;
head.appendChild(sc2);
setTimeout(function () {
head.removeChild(sc2);
sc2 = null;
}, 600);
} //end addScript()
function suggest(data) {
var sel = el("test");
sel.innerHTML = '';
for (x = 0; x < data[1].length; x++) {
sel.innerHTML += '<li class="uli" >' + data[1][x][0] + '</li>';
}
}
el("inp").onkeyup = function () {
addScript("http://www.google.nl/complete/search?callback=suggest&q=" + this.value);
};
问题是我希望能够使用箭头键进入建议列表,其次我想在输入字段中显示“当前”建议值。所以我用 Jquery 尝试了这样的事情:
$("#inp").live("keydown", function (e) {
var curr = $('#test').find('.current');
if (e.keyCode == 40) {
if (curr.length) {
$(curr).attr('class', 'uli');
curr = $(curr).next();
}
if (curr.length) {
curr.attr('class', 'uli current');
} else {
$('#center li:first-child').attr('class', 'uli current');
}
}
if (e.keyCode == 38) {
if (curr.length) {
$(curr).attr('class', 'uli');
curr = $(curr).prev();
}
if (curr.length) {
curr.attr('class', 'uli current');
} else {
$('#center li:last-child').attr('class', 'uli current');
}
}
$("#inp").live("keydown", function (e) {
var search_terms = $('li.current').text();
if (e.keyCode == 40) {
$('#inp').val(search_terms);
}
if (e.keyCode == 38) {
$('#inp').val(search_terms);
}
它不起作用,因为(我认为..)前面的代码立即请求了“当前”建议。 我把所有东西都放在这里了:JS Bin
【问题讨论】:
-
所以我让它像这样使用 onkeypress 工作:
el("inp").onkeypress=function(){ addScript("http://www.google.nl/complete/search?callback=suggest&q="+this.value); }但现在它在第一次按键时没有响应,而是从第二次按键开始。我能解决这个问题吗? -
哦,不,我刚刚发现退格键不能与按键一起使用,所以没关系...
标签: javascript jquery input google-suggest