使用jQuery验证密钥上的电子邮件地址

时间:2013-10-29 11:30:19

标签: javascript jquery

我试图验证一个电子邮件地址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');
      }
    }
});

3 个答案:

答案 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的浏览器中为您进行验证。

FIDDLE

答案 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()