我試圖創建一個電子郵件驗證字段,該字段在電子郵件不符合標準時顯示錯誤消息。爲此,我使用鍵盤作爲事件,因此只要用戶輸入錯誤的電子郵件,郵件就會顯示出來。阻止延遲觸發的jQuery鍵盤輸入
但是這種方式每次用戶輸入一個字符消息顯示,所以我想我會添加一個延遲,並找到一個函數,但這確實會增加一個延遲,但仍然顯示每次消息觸發。
有人知道如何確保事件只在用戶停止一段時間後才被調用嗎?
<table>
<tr>
<td>Email</td>
<td>
<input type="text" class="email" value="[email protected]">
</td>
<td><span class="message"></span></td>
</tr>
</table>
function isEmail(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
$('.email').on('keyup', function() {
var delay = (function() {
var timer = 0;
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
var email = $('.email').val();
$(this).closest('tr').find('.message').hide();
if (isEmail(email) == false) {
delay(function() {
$('.email').closest('tr').find('.message').hide().html('Invalid email.').fadeIn('fast');
}, 1000);
} else {
$(this).closest('tr').find('.message').hide();
}
});
爲什麼你需要延遲哥們看起來將毫不拖延地工作,以及 – Santhucool
刪除延遲和使用「模糊」事件而不是「KEYUP」 –
@santhucool因爲我我們很容易注意到,用戶每次輸入內容時都會得到驗證,但是如果您問我,每次用戶輸入的內容都會有點矯枉過正。所以我認爲我只會觸發用戶的鍵盤事件完成鍵入 – Bart