Jquery POST建议清单

时间:2012-12-11 16:38:06

标签: jquery 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
    });
}
}

4 个答案:

答案 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
});​

http://jsfiddle.net/gunuW/

答案 1 :(得分:0)

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

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

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

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

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

答案 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)

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