Jquery POST建议清单

我有下一个代码并且运行良好,问题是当用户完成单词编写时,脚本会不断创建post调用并更改建议列表。

我想做一些事情,如果用户继续写一个单词,脚本会停止所有后调用只做最后一次。

$("#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 }); } } 

您可以使用setTimeout设置在发生post之前允许的击键之间的某段时间。 – 然后使用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 });​ 

http://jsfiddle.net/gunuW/

像这样的东西应该工作:

 function lookup(inputString) { if (... else if (!$("#suggestions").data('blocking')) { $("#suggestions").data('blocking', true); $.post(...function (data) { ... $("#suggestions").data('blocking', false); }); } } 

如果在$("#suggestions").data('blocking')设置的互斥锁,则只执行ajax请求.data $("#suggestions").data('blocking')为false; 它在请求之前设置为true,并在请求完成后设置为false。

打字后查找。 请查看以下示例: http : //www.openjs.com/scripts/events/check_after_typing.php

我建议在keydown事件上发送和AJAX请求,即:

 $("#searchBox").keydown(function() { lookup($(this).val()); }); 

这只会在用户输入内容时发送一个AJAX请求。

编辑:
我做了一个JSFiddle,并且这样做我意识到它必须是keyup而不是keydown (使用keydown你不会得到输入后输入的字符)。

这是小提琴: http : //jsfiddle.net/11684/sjCTZ/1/