2016-06-06 5 views
0

Ich habe ein Formular, mit dem Menschen bis zu 5 Personen beziehen können. Wenn der Name von Referrer 1 ausgefüllt wird, überprüft der jquery-Code das Formular und fordert den Benutzer auf, die anderen Formularfelder für Verweis 1 auszufüllen.Looping von Regeln Jquery

Ich frage mich, ob es möglich ist, eine Schleife zu erstellen, die die Überprüfung durchführt 5x anstatt den untenstehenden Code für jeden Überweisungssatz zu kopieren und einzufügen?

$("#customer_referral").validate({ 

     rules: { 

      Referral_1_Salutation: { 
       required: function(element) { 
       if($('[name="Referral_1_Name"]').is(':filled')||$('[name="Referral_1_Email"]').is(':filled')||$('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)){ 
        return true;        
       } else {      
        return false; 
       } 
       }   
      }, 

      Referral_1_Name: { 
       required: function(element) { 
       if(($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Email"]').is(':filled') || $('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)){ 
        return true;        
       } else {      
        return false; 
       } 
       }     
      }, 
      Referral_1_Email: { 
       required: function(element) { 
       if(($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)){ 
        return true;        
       } else {      
        return false; 
       } 
       }     
      }, 

      Referral_1_Best_Time_To_Call: { 
       required: function(element) { 
       if(($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Email"]').is(':filled') || $('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')){ 
        return true;        
       } else {      
        return false; 
       } 
       }     
      },             

     //Check if any one of the contact number is filled 
     Referral_1_Contact_Number_Mobile: { 
      require_from_group_contact: function(element) { 
       if (($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Email"]').is(':filled') || ($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)) { 
        return [1, ".oneormore"]; 
       } else { 
        return [0, ".oneormore"]; 
       } 
      } 
     }, 

     Referral_1_Contact_Number_Home: { 
      require_from_group_contact: function(element) { 
       if (($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Email"]').is(':filled') || ($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)) { 
        return [1, ".oneormore"]; 
       } else { 
        return [0, ".oneormore"]; 
       } 
      } 
     }, 
     Referral_1_Contact_Number_Office: { 
      require_from_group_contact: function(element) { 
       if (($('[name="Referral_1_Salutation"]').prop("selectedIndex")!=0) || $('[name="Referral_1_Name"]').is(':filled') || $('[name="Referral_1_Email"]').is(':filled') || ($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)) { 
        return [1, ".oneormore"]; 
       } else { 
        return [0, ".oneormore"]; 
       } 
      } 
     } 
     //End of check if any one of the contact number is filled                 

     }, 
}); 
+0

Als Randbemerkung, versuchen Sie den [erfordert aus der Gruppe] mit (https://jqueryvalidation.org/require_from_group-method/) Validator auf Ihrem wiederholten Code abgeholzt . –

Antwort

0

Regeln können auch über the .rules() method angewandt werden, die Ihnen die Möglichkeit gibt, jQuery Selektoren zu verwenden, die Dinge allgemeines Ziel. Wenn der Selektor also auf mehrere Elemente abzielt, können Sie mit jQuery .each() diese alle durchlaufen.

$('.myfields').each(function() { 
    $(this).rules('add', { 
     required: true, 
     // other rules 
    }); 
}); 

Auf einer Randnotiz ...

required: function(element) {     
    if ($('[name="Referral_1_Name"]').is(':filled')||$('[name="Referral_1_Email"]').is(':filled')||$('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)) { 
     return true;        
    } else {      
     return false; 
    } 
} 

Da Sie eine boolean auf einem boolean Bedingung basiert Rückkehr Ihre Funktion nur durch Rückkehr das Ergebnis stark vereinfacht werden könnte die bedingte ...

required: function(element) {      
    return ($('[name="Referral_1_Name"]').is(':filled')||$('[name="Referral_1_Email"]').is(':filled')||$('[name="Referral_1_Contact_Number_Mobile"]').is(':filled') || $('[name="Referral_1_Contact_Number_Home"]').is(':filled') || $('[name="Referral_1_Contact_Number_Office"]').is(':filled')||($('[name="Referral_1_Best_Time_To_Call"]').prop("selectedIndex")!=0)); 
} 

EDIT:

Erstens muss alles überarbeitet werden, um generischer zu sein. Ich nahm the code from your previous question und überarbeitete es ein bisschen, um etwas allgemeineres zu erhalten. Anstatt jedes Feld bedingt zu betrachten, habe ich die Regel skip_or_fill_minimum verwendet, um die required Regel zu ersetzen.

DEMO: http://jsfiddle.net/yo2vjwus/

Jetzt, da wir ein Arbeitsmodell haben, das allgemein genug ist, können wir die .rules() Methode verwenden diese Regeln auf mehrere Felder auf einmal anzuwenden.

$('[name^=Referral_1_]:not("[name^=Referral_1_Contact]")').each(function() { 
    $(this).rules('add', { 
     skip_or_fill_minimum: [4, '[name^=Referral_1_]:not("[name^=Referral_1_Contact]")'] 
    }); 
}); 

$('[name^="Referral_1_Contact"]').each(function() { 
    $(this).rules('add', { 
     require_from_group: function(element) { 
      if ($('[name="Referral_1_Salutation"]').is(':filled')) { 
       return [1, '[name^=Referral_1_Contact]']; 
      } else { 
       return [0, '[name^=Referral_1_Contact]']; 
      } 
     } 
    }); 
}); 

DEMO: http://jsfiddle.net/yo2vjwus/1/

Was die übrigen vier Sätze von Feldern, werden Sie den Code duplizieren oder machen es noch generisch und setzen alles in einer anderen jQuery .each().

var i = 1; 

$('[id^="Referral"]').each(function() { 

    $('[name^=Referral_' + i + '_]:not("[name^=Referral_' + i + '_Contact]")').each(function() { 
     $(this).rules('add', { 
      skip_or_fill_minimum: [4, '[name^=Referral_' + i + '_]:not("[name^=Referral_' + i + '_Contact]")'] 
     }); 
    }); 

    $('[name^="Referral_' + i + '_Contact"]').each(function() { 
     $(this).rules('add', { 
      require_from_group: function(element) { 
       if ($(element).parents('.parentClass').find('[name$="_Salutation"]').is(':filled')) { 
        return [1, '[name^="Referral_' + i + '_Contact"]']; 
       } else { 
        return [0, '[name^="Referral_' + i + '_Contact"]']; 
       } 
      } 
     }); 
    }); 

    i++; 

}); 

DEMO: http://jsfiddle.net/yo2vjwus/2/

+0

Ich habe wirklich keine Idee, wie Sie die oben genannten Regeln und require_from_group integrieren. Können Sie bitte ein ausführlicheres Beispiel geben? – Spiral1ng

+0

@ user558085, siehe meine bearbeitete Antwort. Beachten Sie jedoch, dass Sie einfach gefragt haben, wie Sie die Regeln mithilfe einer Schleife anwenden. – Sparky

+0

Vielen Dank für die Antwort. Ich denke jedoch, die $ ('[Name^= "Referral_' + i + '_Contact"]). Jede Funktion wurde nicht ausgeführt, da die 3 Kontaktnummern nicht aufgefordert wurden, ausgefüllt zu werden, wenn die Anrede ausgewählt wurde. – Spiral1ng