一段时间后在javascript中调用函数

一段时间后在javascript中调用函数,javascript,html,ajax,dom,Javascript,Html,Ajax,Dom,我正在尝试编写一个函数,当用户在输入字段中键入内容时,该函数将自动建议用户的意思。现在,我已经完成了所有的自动建议代码,但在我的javascript中,无论我做什么,我都无法获得第一个if in-toggleGenusInput(第一个if通过php查询数据库并获得建议) 有人知道我如何修改我的代码,以便如果在输入字段中键入了某个内容,并且在2秒钟后没有更改,它将首先输入该内容,如果?谢谢 以下是我的脚本全局: var time = new Date(); var timeout = 2000;

我正在尝试编写一个函数,当用户在输入字段中键入内容时,该函数将自动建议用户的意思。现在,我已经完成了所有的自动建议代码,但在我的javascript中,无论我做什么,我都无法获得第一个if in-toggleGenusInput(第一个if通过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)" />

您可以使用处理程序并将其绑定到
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);
    }
}



现在,无论何时按下一个键(不在焦点上),您的函数都将被调用,并等待一定时间来执行该功能。如果另一个超时正在运行,它将首先被取消(否则,当用户插入文本时,您将一次又一次地创建超时,这将导致奇怪的结果)。

@sje397,感谢您向我展示这一点。然而,在这个程序中,我需要持续调用超时函数(因此,无论给定什么函数,都需要每2秒调用一次)。有没有办法做到这一点?setInterval几乎是一样的,但会重复调用指定的代码,直到发出“clearInterval”。您看过web上的autosuggest脚本的列表吗?大多数好的已经做了你想做的一切。
<input type="text" name="autoSuggestInput" onkeyup="toggleGenusInput(document.myForm.autoSuggestInput)" />