我为我的网站编写了一个自动完成插件,它采用文件路径和搜索数据,然后发布一个帖子以获取结果。我意识到我在输入的每个键上都张贴,这不好。所以我想添加一个超时,它只会在最后一次键入后 1 秒(或者可能 0.5 秒)进行搜索。不幸的是,setTimeout 似乎找不到我的函数,我不知道为什么。FireBug 中的特定错误是“ReferenceError: search is not defined”。如果我不使用超时,搜索就会被调用。一些帮助解决这个问题(似乎是范围问题)会很好。
这是我试图开始工作的代码(删减,还有更多)。搜索功能和keyup是重要的部分。一旦我可以让它工作,我会将 setTimeout 上方的东西移动到函数中(假设变量通过正常)。显然我必须将 setTimeout 分配给一个变量,以便我可以覆盖它并且只在时间过去后调用它一次。
jQuery.fn.autocomplete = function (pathOption, sendData) {
function search() {
console.log(this);
}
var $inputBox = $(this), onWrapper = false;
$inputBox.keyup(function () {
if ($(this).val().length >= 3 && $(this).val() != $(this).data('placeholder')) {
$.extend(sendData, { search: $(this).val() });
$.post(SITEROOT + pathOption, sendData, function (data) {
if (data.length > 0) {
$resultsDiv.html(data).slideDown();
} else $resultsDiv.slideUp();
});
setTimeout('search', 1000);
} else $resultsDiv.slideUp();
});
}