2011-11-04 34 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

非常感謝您的幫助碩士..我會記住這個解決方案。費利克斯給了我一個沒有這個庫的同等解決方案。不過我會看看這個。無論如何,我給你一點意見。 –