2011-11-04 77 views
3

要启动的功能让我们说,用户完成键入最后一种类型后的第二个半年。我有这一块的用户正在一个类型的脚本启动,我不想要的代码,但每次:jquery延迟事件,直到用户输入完毕

$(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

您将如何知道用户已完成打字? –

+0

你如何确认用户输入完成?用户打了哪个键才能完成打字? – run

回答

6

我认为这将是足以启动如果用户在此期间继续打字,则会等待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); 
}); 
+0

感谢您的回答!你理解了这个问题,但脚本延迟了1.5秒(没关系),但是如果我键入两个字符,脚本仍然运行两次。 –

+0

哦,我犯了一个小错误。你必须在函数内部移除'var'。更新。演示:http://jsfiddle.net/gjFm9/ –

+0

感谢您的帮助! –

3

你会想要的是一个debouncing脚本。

一个非常简单的解决方案将被嵌入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)); 
+0

非常感谢您的帮助硕士..我会记住这个解决方案。费利克斯给了我一个没有这个库的同等解决方案。不过我会看看这个。无论如何,我给你一点意见。 –