3

メールアドレス 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');
      }
    }
});
4

3 に答える 3

8

あなたのコードは少し間違っています。これを行うことができます:

$('.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

于 2013-10-29T11:32:12.990 に答える
4

あなたが実際にやろうとしているのはこれだけである場合、それは非常に多くのコードです。

$('.newsletter-signup input:first').on('keyup', function(){
    var valid = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/.test(this.value);
    alert(valid ? 'foo' : 'bar');
});

入力タイプを「email」に設定すると、HTML5 をサポートするブラウザーで検証が行われることにも注意してください。

フィドル

于 2013-10-29T11:36:13.973 に答える
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()

于 2013-10-29T11:31:53.300 に答える