我有下一个代码并且效果很好,问题是当用户完成单词编写时,脚本会不断创建帖子调用并不断更改建议列表。
我想做一些事情,如果用户继续写一个单词,脚本会停止所有的帖子调用,只做最后一次。
$("#inputString").keydown(function() {
lookup($(this).val());
//alert('a');
});
function lookup(inputString) {
if(inputString.length == 0) {
$('#suggestions').fadeOut(); // Hide the suggestions box
} else {
$.post("../jsonshow.php", {q: ""+inputString+""}, function(data) { // Do an AJAX call
$('#suggestions').fadeIn(); // Show the suggestions box
$('#suggestions').html(data); // Fill the suggestions box
});
}
}
答案 0 :(得分:2)
您可以使用setTimeout在帖子发生前允许按键之间设置一定的时间。 - 然后使用clearTimeout
清除每次击键的计时器var action;
$('#inputString').keydown(function(){
clearTimeout(action);
var $el = $(this);
action = setTimeout(function(){
lookup($el.val());
},1000); // <-- amount of time in ms before your post will run
});
答案 1 :(得分:0)
我建议在keydown事件上发送和AJAX请求,即:
$("#searchBox").keydown(function() {
lookup($(this).val());
});
这只会在用户输入内容时发送一个AJAX请求。
修改强>
我做了一个JSFiddle,这样做我意识到它必须是keyup
而不是keydown
(使用keydown你不会得到输入后输入的字符。)
答案 2 :(得分:0)
这样的事情应该有效:
function lookup(inputString) {
if (...
else if (!$("#suggestions").data('blocking')) {
$("#suggestions").data('blocking', true);
$.post(...function (data) {
...
$("#suggestions").data('blocking', false);
});
}
}
如果$("#suggestions").data('blocking')
中设置的互斥锁为false,则仅执行ajax请求;它在请求之前设置为true,并在请求完成后设置为false。
答案 3 :(得分:0)