2016-12-21 2 views
0

EDIT2 unterschiedlich sein müssen:jQuery Validierung einige Eingabe von einander

Ich fühle mich in der Nähe der Lösung bin. Im Anschluss an den Vorschlag des vicgoyso habe ich einen Gegenstand aus meiner Eingänge (und nicht Arrays), und dann verglich ich sie: see the jsfiddle

Da dieser Vergleich funktioniert: comparison on jsfiddle Ich würde der Code erwarten oben als auch zu arbeiten, aber es ist nicht.


EDIT: Die jQuery-Methode Ich arbeitete an ist ähnlich wie diese:

$().ready(function(){ 
    $.validator.addMethod("same_names", function(value, element) { 
     if (!$('#surname').val() || $('#surname').val() != null 
       && !$('#surname1').val() || $('#surname1').val() != null){ 
      return $('#name').val() != $('#name1').val() 
      && $('#surname').val() != $('#surname1').val() 
      && $('#nickname').val() != $('#nickname1').val() 
     } 

     }, " Your input is equal to another"); 

    $("#myForm").validate({ 
     rules: { 
      name: { 
       required: false, 
       same_names: true 
      }, 
      name1: { 
       required: false, 
       same_names: true 
      }, 
      surname: { 
       required: false, 
       same_names: true 
      }, 
      surname1: { 
       required: false, 
       same_names: true 
      }, 
      nickname: { 
       required: false, 
       same_names: true 
      }, 
      nickname1: { 
       required: false, 
       same_names: true 
      }, 
     }, 
     messages: { 
     ... 
     } 
    }) 
}); 

Es weiterhin sagen, dass Name, Vorname und Spitznamen erforderlich sind, und sie sind es nicht. Ohne jQuery meine Methode zu diesem ähnlich ist:

$('#myForm').submit(function (event) { 
    var errors = false; 
    if ($('#name').val() == $('#name1').val() && 
     $('#surname').val() == $('#surname1').val() && 
     $('#nickname').val() == $('#nickname1').val() 
     || 
     $('#name').val() == $('#name2').val() && 
     $('#surname').val() == $('#surname2').val() && 
     $('#nickname').val() == $('#nickname2').val() 
     || 
     $('#name').val() == $('#name3').val() && 
     $('#surname').val() == $('#surname3').val() && 
     $('#nickname').val() == $('#nickname3').val() 
     || 
     $('#name').val() == $('#name4').val() && 
     $('#surname').val() == $('#surname4').val() && 
     $('#nickname').val() == $('#nickname4').val() 
     .... 
     || 
     $('#name').val() == $('#name10').val() && 
     $('#surname').val() == $('#surname10').val() && 
     $('#nickname').val() == $('#nickname10').val() 
     || 
     $('#name1').val() == $('#name2').val() && 
     $('#surname1').val() == $('#surname2').val() && 
     $('#nickname1').val() == $('#nickname2').val() 
     || 
     $('#name1').val() == $('#name3').val() && 
     $('#surname1').val() == $('#surname3').val() && 
     $('#nickname1').val() == $('#nickname3').val() 
     .... and so on 
     ) { 
     $("#error").show(); 
     location.href = "#"; 
       location.href = "#error"; 
      errors = true; 
    } else { 
     errors = false; 
     $("#error").hide(); 
    } 
    if (errors == true) { 
     event.preventDefault(); 
    } 
}); 

Meine eigentliche jsp ist ähnlich wie diese (es 10 Eingangsgruppen sind mit Namen + Nachname + Spitznamen gebildet):

<form id="myForm" method="post"> 
<input id="name" name="name" /> 
<input id="surname" name="surname" /> 
<input id="nickname" name="nickname" /> 
    <br/ > 
<input id="name1" name="name1" /> 
<input id="surname1" name="surname1" /> 
<input id="nickname1" name="nickname1" /> 
<br/> 
<input id="name2" name="name2" /> 
<input id="surname2" name="surname2" /> 
<input id="nickname2" name="nickname2" /> 
    <br /> 
<input id="name3" name="name3" /> 
<input id="surname3" name="surname3" /> 
<input id="nickname3" name="nickname3" /> 
    <br /> 
    <br /> 
<input id="submit" type="submit" value="submit" /> 
</form> 

Ich möchte ein Fehler, nur wenn man diese Gruppe (Name, Vorname, Nickname) auf einem anderen gleich ist, beispielsweise ist dies ein Fehler:

  • John
  • Smith
  • Prinz *
  • John
  • Smith
  • Prinz *
  • John
  • Smith
  • Schneemann

Aber dieses ist nicht:

  • John
  • Smith
  • Prinzmindestens ein Feld verschieden ist, so dass der Eingang
  • John
  • Smith
  • Schneemann * mindestens ein Feld unterschiedlich fein ist, so ist die Eingabe in Ordnung
  • John
  • Smith
  • Feuerkugel mindestens ein Feld verschieden ist, so dass der Eingang

FRAG fein Was passiert, wenn ich will diesen Code verwenden:
https://stackoverflow.com/a/16965721/4477899

zu löse dieses Problem hier:
Form validate some input must be different from each other

Ich frage, weil ich jQuery validate bereits verwende, und die vorherige Methode funktioniert nicht gut, wenn Felder mehr als zwei Gruppen sind oder leer sind (diese Felder sind nicht erforderlich).

+0

Bitte zeigen Sie uns Code, mit dem Sie bisher experimentiert haben. Ein minimales, vollständiges und überprüfbares Beispiel sollte ausreichen. – wiredolphin

Antwort

1

In Bezug auf diesen Teil nur:

EDIT2:

I feel I'm near the solution. Following the vicgoyso's suggestion I created some object from my inputs (and not arrays), and then I compared them: see the jsfiddle

Since this comparison is working: comparison on jsfiddle I would expect the code above to work as well, but it's not.

Sie scheiterte jQuery selbst im jsFiddle aufzunehmen.

Hauptsächlich würde es sowieso nicht funktionieren, weil Ihre boolesche Logik rückwärts ist. Sie erhalten true, wenn Sie eine Übereinstimmung finden. Sie haben dann aber return true aus der addMethod() Methode, also mit einer true Sie sagen es PASS Validierung. Um die Validierung zu überprüfen, müssen Sie stattdessen return false.

return !duplicateFound; 

, schließlich zu machen die Felder optional, Sie ein wenig mehr Logik brauchen werden ...

return this.optional(element) || !duplicateFound; 

DEMO: https://jsfiddle.net/awb4tcyy/3/


Als allgemeine Beachten Sie, dass Ihr Code unglaublich komplex wird, wenn Sie mit mehr Gruppen von Feldern skalieren. Ich würde vorschlagen, dass Sie eine Art von Looping-Algorithmus nutzen. Viel Glück.

+0

Vielen Dank, ich studiere es, um es perfekt für meinen Fall zu machen – tina

0

Sie müssen zuerst eine benutzerdefinierte Validierungsmethode definieren: https://jqueryvalidation.org/jQuery.validator.addMethod/

jQuery.validator.addMethod("laxEmail", function(value, element) { 
    var duplicateFound = false; 

    //apply input values in array 
    //check for duplicates 
    duplicateFound = true; //update variable if duplicate found 

    return duplicateFound; 
}, 'Input values cannot be identical'); 

In Ihrer benutzerdefinierten Validierung erhalten/speichern die Eingabewerte in einem Array: jQuery get values from inputs and create an array

überprüfen Array dann nach Duplikaten, return true, wenn doppelte gefunden wird: How can I check if the array of objects have duplicate property values?

Sie dann den Namen der benutzerdefinierten validatio hinzufügen n Regel Validierung an den Eingang wie folgt:

myForm.validate({ 
    rules: { 
    myCustomRule: { 
     required: true 
    } 
    }, 
    messages { 
    myCustomRule: { 
    required: "Input values cannot be identical" 
    } 
    } 
}); 
+0

Danke für Ihre Antwort, ich studiere, wie man es anwendet – tina