延迟jQuery中的keypress之间的动作

Sin*_*nan 30 ajax jquery delay

如何在jQuery中的keypress之间延迟操作.例如;

我有类似的东西

 if($(this).val().length > 1){
   $.post("stuff.php", {nStr: "" + $(this).val() + ""}, function(data){
    if(data.length > 0) {
      $('#suggestions').show();
      $('#autoSuggestionsList').html(data);
    }else{
      $('#suggestions').hide();
    }
 });
}
Run Code Online (Sandbox Code Playgroud)

如果用户不断输入,我想阻止发布数据.那我怎么能延迟0.5秒呢?

Nic*_*ver 63

您可以使用jQuery的数据功能来执行此操作,如下所示:

$('#mySearch').keyup(function() {
  clearTimeout($.data(this, 'timer'));
  var wait = setTimeout(search, 500);
  $(this).data('timer', wait);
});

function search() {
  $.post("stuff.php", {nStr: "" + $('#mySearch').val() + ""}, function(data){
    if(data.length > 0) {
      $('#suggestions').show();
      $('#autoSuggestionsList').html(data);
    }else{
      $('#suggestions').hide();
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

这里的主要优点是遍布整个地方没有全局变量,如果你愿意,你可以将它包装在setTimeout中的匿名函数中,只是尽量使示例尽可能干净.


jve*_*ema 11

您需要做的就是将函数包装在超时中,当用户按下某个键时,该超时会被重置:

var ref;
var myfunc = function(){
   ref = null;
   //your code goes here
};
var wrapper = function(){
    window.clearTimeout(ref);
    ref = window.setTimeout(myfunc, 500);
}
Run Code Online (Sandbox Code Playgroud)

然后只需在您的键事件中调用"wrapper".