1

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

我想做一些事情,如果用户继续写一个单词,脚本会停止所有的 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

4 回答 4

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/

于 2012-12-11T16:52:21.300 回答
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。

于 2012-12-11T16:45:42.783 回答
0

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

于 2012-12-11T16:47:56.860 回答
0

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

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

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

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

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

于 2012-12-11T16:43:38.150 回答