我正在尝试编写一个函数,该函数会自动建议用户在输入字段时输入的含义。现在我已经完成了所有的自动建议代码,但是在我的javascript中,无论我做什么,我都无法进入第一个toggleGenusInput(这首先是通过php查询数据库并获取建议)。
有没有人知道如何修改我的代码,以便如果输入字段中输入了某些内容并且在2秒后没有更改,那么它将首先输入?感谢。
以下是我的脚本全局:
var time = new Date();
var timeout = 2000; //query db every 2 seconds of not typing anything
var autoSuggest = true;
var lastQueryTyped = "";
var queryTypedAt = time.getTime(); //what time the last new text was entered
这是连接到输入节点的onfocus方法的函数:
function toggleGenusInput(inputNode) {
if(autoSuggest) {
if((time.getTime() - queryTypedAt) >= timeout && inputNode.value == lastQueryTyped) {
//the input has not changed and it's reached the timeout time, requery the db
responseDoc = getXMLFrom("getsimilaritems.php?query=" + inputNode.value);
if(queryFindsSuggestions(responseDoc)) {
cleanUpSuggestions();
appendSuggestions(inputNode, responseDoc);
}
}
else if(inputNode.value != lastQueryTyped) {
//something new was entered so update the time and what was put in
lastQueryTyped = inputNode.value;
queryTypedAt = time.getTime();
}
}
}
这是函数附加到的html对象:
<input type="text" name="autoSuggestInput" onfocus="toggleGenusInput(document.myForm.autoSuggestInput)" />
答案 0 :(得分:1)
您可以使用setTimeout
并将处理程序绑定到keyup
事件:
function toggleGenusInput(inputNode) {
if(autoSuggest) {
if(_timeout) {
clearTimeout(_timeout);
}
_timeout = setTimeout(function() {
//the input has not changed and it's reached the timeout time, requery the db
responseDoc = getXMLFrom("getsimilaritems.php?query=" + inputNode.value);
if(queryFindsSuggestions(responseDoc)) {
cleanUpSuggestions();
appendSuggestions(inputNode, responseDoc);
}
}, 2000);
}
}
和
<input type="text" name="autoSuggestInput" onkeyup="toggleGenusInput(document.myForm.autoSuggestInput)" />
现在,只要按下某个键(不在焦点上),就会调用您的函数并等待一段时间来执行该功能。如果另一个超时正在运行,它将首先被取消(否则,当用户插入会导致奇怪结果的文本时,您会反复创建超时)。