Jquery延迟事件,直到用户完成输入

时间:2011-11-04 10:38:01

标签: jquery action wait

要启动的功能让我们说用户输入完最后一个类型后的第二个半。我有这段代码,但每次用户创建一种类型时,脚本就会启动,我不想要:

$(document).ready(function()
{
  var $firstname    = $("#firstname");

  $firstname.keyup(function()
  {
    var content = $("#firstname").val();
    $.post("ajax.php", { firstname: content}, function(result){
        var contentDiv = $("#ContainerValidation");
        contentDiv.fadeOut(400, function(){ contentDiv.html(result); });
        contentDiv.fadeIn(400);
        contentDiv.fadeOut(5000);
      });
    });
});

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

我认为启动等待1.5秒的计时器就足够了,如果用户在此期间继续打字就会中止:

function send() {
    $.post("ajax.php", { firstname: $firstname.val()}, function(result){
        $("#ContainerValidation")
           .fadeOut(400, function(){ $(this).html(result); })
           .fadeIn(400)
           .fadeOut(5000);
    });
}

var timer = null;
$firstname.keyup(function() {
    clearTimeout(timer);
    timer = setTimeout(send, 1500);
});

答案 1 :(得分:3)

你想要的是一个去抖动脚本。

一个非常简单的解决方案是嵌入Underscore.js库,它包含这样一个函数:http://documentcloud.github.com/underscore/#debounce

你会这样使用它:

$firstname.keyup(_.debounce(function () {
    var content = $("#firstname").val();
    $.post("ajax.php", {
        firstname: content
    }, function (result) {
        var contentDiv = $("#ContainerValidation");
        contentDiv.fadeOut(400, function () {
            contentDiv.html(result);
        });
        contentDiv.fadeIn(400);
        contentDiv.fadeOut(5000);
    });
}, 1500));