電子メールが規格に適合しない場合、エラーメッセージを表示する電子メール検証フィールドを作成しようとしています。このために私はイベントとしてkeyupを使用したので、ユーザーが間違った電子メールを入力するとすぐにメッセージが表示されます。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