我试图验证一个电子邮件地址onkeyup只有以下似乎永远不会返回有效,
有谁可以看到我可能出错的地方?我只有1个输入,我的.first()
选择器正确定位...
$('.newsletter-signup input').first().keyup(function(){
$email = $('.newsletter-signup input').first();
function validateEmail($email) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if( !emailReg.test( $email ) ) {
alert('foo');
} else {
alert('bar');
}
}
});
答案 0 :(得分:6)
你的代码有点不对,你可以这样做:
$('.newsletter-signup input').first().keyup(function () {
var $email = this.value;
validateEmail($email);
});
function validateEmail(email) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if (!emailReg.test(email)) {
alert('foo');
} else {
alert('bar');
}
}
在您的代码中:
$email = $('.newsletter-signup input').first();
你只获得第一个输入的jQuery对象而不是值。因此,验证根本不起作用。
因此,为了获得您可以使用的input
元素的值:
var $email = this.value;
这里this
指的是$('.newsletter-signup input').first()
。所以需要再次调用它,然后从中获取它的值。您可以使用this.value
直接执行此操作。
答案 1 :(得分:3)
当你真正想要做的就是这个时,很多代码都做得很少:
$('.newsletter-signup input:first').on('keyup', function(){
var valid = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/.test(this.value);
alert(valid ? 'foo' : 'bar');
});
另请注意,将输入类型设置为“email”会在支持HTML5的浏览器中为您进行验证。
答案 2 :(得分:0)
$('.newsletter-signup input').first().keyup(function(){
$email = $(this).val();// use val here to get value of input
validateEmail($email);
});
function validateEmail($email) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if( !emailReg.test( $email ) ) {
alert('foo');
} else {
alert('bar');
}
}
参考 .val()