2016-07-04 9 views
0

ページに2つの入力フィールドと2つの送信フォームがあり、同じことをします...ユーザーの電子メールを購読するだけです。私は次のコードを使用しています2つの同じフォームを1ページで処理する方法は?

http://codepen.io/anon/pen/KrqrYB

$("input[type='text']").focus(function() { 
    $(this).val(''); 
}); 

$(".message-validator").hide(); 

function validate() { 
    var email = $(".input-set-input").val(), 
     lastChar = email.substr(-1); 
    if (validateEmail(email)) { 
    $(".message-validator").hide(); 
    } else { 
    $(".message-validator").show(); 

    if (email === "") { 
     $(".message-validator").text("Please provide a valid email."); 
    } else { 
     if (email.indexOf('@') > 0) { 
     if (lastChar === "@") { 
      $(".message-validator").text("Please enter a part following '@'."); 
     } else { 
      $(".message-validator").text("Please provide a valid email."); 
     } 
     } else { 
     $(".message-validator").text("Please include an '@' in the email address."); 
     } 
    } 

    } 
    return false; 
} 

$("form").bind("submit", validate); 

function validateEmail(email) { 
    var re = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
    return re.test(email); 
} 

が、これはそれを行うための正しい方法ですか?または、2つの異なるフォームクラスとボタンを作成し、それらを別々に処理する必要がありますか?

+0

あなた '検証()'関数の作品をリライトする予定がないような例だfind()

を使用して、その形をしている要素のみを対象一般的な方法で。送信されたフォーム、つまり 'submit'イベントをトリガーしたフォームのみをターゲットにする必要があります。 –

答えて

1

フォーム送信ハンドラ関数thisは、イベントが発生したフォームになります。だから、

ここで私は全部に

function validate() { 
    var $form = $(this);// cache $(this) 
    var email = $form.find(".input-set-input").val() 
    ...... 
$form.find(".message-validator").hide(); 
関連する問題