2016-08-05 10 views
0

私はポップアップで表示される2つのフォームを持っています。編集用に(ajaxによってロードされる)、作成用に1つです。検証のために1ページに2つのフォームを処理する方法は?

フィールドの編集と提出の両方でヒントを表示するには、jqueryの検証を使用します。

検証の中には、重複してはならない時間範囲が含まれているものがあります。

これは作成時に機能しますが、作成ルールが優先されるため、編集用に作成する新しいルールがトリガーされません。

名前やIDで作成したルールが何らかの理由でアクティブにならないため、クラスルールを追加しました。おそらくjqueryのプラグインの検証方法が混乱している可能性があります。これらのルールはコードスニペットでコメントアウトされています。

var classRules = {}; 

classRules['thresholdStartTime'] = {}; 
classRules['thresholdStartTime'][globalThresholdCheckName] = $form 
classRules['thresholdEndTime'] = {}; 
classRules['thresholdEndTime'][globalThresholdCheckName] = $form 

/* 
* 
for(var q = 0; q<20; ++q) { 
    validationrules['thresholdStartTime' + q] = {}; 
    validationrules['thresholdStartTime' + q]['required'] = true; 
    validationrules['thresholdStartTime' + q][globalThresholdCheckName] = $form 

    validationrules['thresholdEndTime' + q] = {}; 
    validationrules['thresholdEndTime' + q]['required'] = true; 
    validationrules['thresholdEndTime' + q][globalThresholdCheckName] = $form 

} 
*/ 

for(var cls in classRules) { 
    var rule = classRules[cls]; 
    $.validator.addClassRules(cls, rule); 
} 

//return validationrules as rm.rules here 

//in the caller, get validationrules from result 
var editForm = $('#editForm') 
.validate(
     { 
      rules : rm.rules, 
      classRules: rm.classRules, 
      messages : rm.messages, 
      success : $.noop 
     }); 
+0

感謝のために皆を手伝い。それは、検証が最初に設定されているため、同じフォームの2番目の検証コマンドを無視しているようです。 – Adder

答えて

1

dataは、フォームのsubmitボタンにそのajax要求を結合し、その後、送信するために選択し、その後、jQuery.ajax()を使用して提出し、フォームのデフォルトのアクションはe.preventDefault()を防ぐことを確認します。各フォームのためにこれを行います。

jQuery('.bidvalue').click(function(e) { 
    e.preventDefault(); 
    jQuery.ajax({ 
     type: 'POST', 
     url: ajaxurl, 
     data: 'action=newbid&id='+e.target.name, 
     success: function(msg){ 
      jQuery('#vehicle-value-box'+e.target.name).html(msg+',00€'); 
     } 
}); 

EDIT、私は完全に実際の質問を逃したとして...各フォームについては

を、あなたは以下のように検証を指定することができます

$('#myform1').validate({ 
    rules: { 
     myfield1: { 
      required: true, 
      minlength: 3 
     }, 
     myfield2: { 
      required: true, 
      email: true 
     } 
    } 
}); 

しかし、より具体的で、両方のフォームのHTMLを表示する必要があります。また、どのような検証ルールを使用するかは、f本当にあなたの質問に有益に答えることができます。

EDIT#2:コメントを追加するには、コメントを入力してください(入力にはVicente Olivert Rieraに感謝)。あなたは時に検証を適用するためにどのフォームを切り替えるしたい場合は

、次の操作を行います。

var activeForm; 

$("form").focus(e => { 
    e.validate({ 
     rules: { 
      myfield1: { 
       required: true, 
       minlength: 3 
      }, 
      myfield2: { 
       required: true, 
       email: true 
      } 
     } 
    }); 
}); 

をあなたは多くの形態を持っているだけが唯一の特定の条件に一致する特定の形態たい場合:

$("form").focus(e => { 
    // Some criteria to check against for the form. 
    // Obviously you could make a crafty selector and avoid `if (e.hasClass())`, 
    // but this is to demonstrate using if to test the form if you wanted to check the form element in any way before applying `.validate()`. 
    if (e.hasClass("someClass") { 
     e.validate(...); 
    } 
}); 
+0

これは私の質問にどのように関連していますか? – Adder

+0

...同じページに複数のフォームを提出しますか? –

+0

いいえ、一度に1つのフォームをアクティブにしたいので、フォームフィールドでの検証が難しい部分です。 – Adder

関連する問題