2016-08-01 9 views
0

私は入力データを提出する前に確認する必要があるフォームを持っています。入力要素には1つ以上の検証チェックのタイプが入力され、実行される検証はjQueryによって行われます。送信前にフォームで文字列分割を実行するにはどうすればよいですか?

私のアプローチは、入力要素の「チェック」属性に、「空白、電子メール」など、コンマで区切られたすべてのタイプの検証を入力することです。 jQueryはこの部分を抽出し、配列に分割し、各検証タイプをループします。

問題は、すべての検証チェックが完了するまでフォームを送信したくないということです。しかし、私が "split"関数を使うと、配列を返すので、プログラムはそれをブール値として受け取り、trueが返され、最初のinput要素の後にフォームが提出されます。

ここで、それは他のすべてのフィールドと似ていることのメモを取って、フォームのサンプルです:

// PERFORM VALIDATION CHECKS 
 
$("form").submit(function() 
 
       { 
 
    // LOOP THROUGH ALL INPUT FIELDS 
 
    $("form input, form textarea, form select").each(function() 
 
                { 
 
    // IF NONE OF THE INPUT'S PARENTS ARE HIDDEN 
 
    if($(this).parents(":hidden").length == 0) 
 
    { 
 
     var thisValue = $(this).val(); 
 
     var checkWhat = $(this).attr("check"); 
 
     var checkArray = checkWhat.split(","); 
 
     for(var i=0; i<checkArray.length; i++) 
 
     { 
 
     switch(checkArray[i]) 
 
     { 
 
      case "blank": alert(CheckBlank(thisValue)); break; 
 
      case "nric": alert(ValidateNRIC(thisValue)); break; 
 
      case "email": alert(ValidateEmail(thisValue)); break; 
 
     } 
 
     } 
 
    } 
 
    }); 
 
});

<tr> 
 
    <td>Full Name</td> 
 
    <td><input type="TEXT" name="AccountName" check="blank"></td> 
 
</tr> 
 
<tr> 
 
    <td>NRIC</td> 
 
    <td><input type="TEXT" name="AccountNRIC" check="blank,nric" maxlength="9"></td> 
 
</tr>

そしてここでは、jQueryの検証コードです

まだコードが部分的にテストされているので、エラーチェック変数がまだ追加されていないことを明確にする必要があります。

ご協力いただきありがとうございます。

+1

検証時にエラーが発生した場合は、なぜe.preventDefaultを使用しないのですか? .submit()// エラーがあればe.preventDefault(); }) –

+1

私が知る限り、 'check'は有効な属性ではありません。代わりにデータ属性を使用します。 'データチェック'。 –

+0

こんにちはヴィンセント、ご返信ありがとうございます。私はそれを私の利益に使うためにどうすればいいのか分かりません。あなたはそれについて私にアドバイスできますか?すべてのコードスニペットやリンクが便利です。 –

答えて

1
// PERFORM VALIDATION CHECKS 
$("form").submit(function() 
       { 
    // LOOP THROUGH ALL INPUT FIELDS 
    $("form input, form textarea, form select").each(function(e) 
                { 
    // IF NONE OF THE INPUT'S PARENTS ARE HIDDEN 
    if($(this).parents(":hidden").length == 0) 
    { 
     var _hasError = false; 
     var thisValue = $(this).val(); 
     var checkWhat = $(this).attr("check"); 
     var checkArray = checkWhat.split(","); 
     for(var i=0; i<checkArray.length; i++) 
     { 
     switch(checkArray[i]) 
     { 
      case "blank": if (!CheckBlank(thisValue)) { _hasError = true; } ; break; 
      case "nric": if (!ValidateNRIC(thisValue)) { _hasError = true; }; break; 
      case "email": if (!ValidateEmail(thisValue)) { _hasError = true; }; break; 
     } 
     } 

     if (_hasError) e.preventDefault(); 
    } 
    }); 
}); 
+0

ご協力いただきありがとうございます!私は明日それを試してみると、それが動作するかどうかを確認します。コードを部分的にテストしていたので、エラーチェック変数を追加していないことを明確にする必要があります。再度ありがとう=) –

+1

問題ありません。 _hasErrorは単なるフラグです。 preventDefault()は、イベントのデフォルト動作を停止する関数です。ハッピーコーディング! –

1

はあなたが欲しい、そして提出し、これまでどのようなロジック行い、デフォルトのアクションを提出フォームを停止することができます。

// PERFORM VALIDATION CHECKS 
$("form").submit(function(event){ 
    event.preventDefault(); // stops submit action 

    // do your form validation here. 

}); 

チェックHTML属性もありません。あなたはそれを使うことができますが、それは標準ではありません。または、入力値を取得するだけでもかまいません。ほとんどの人は、カスタムHTML属性にデータを追加します(データチェック)。

関連する問題