2017-06-29 4 views
0

Ich habe ein Formular, wenn submit gedrückt wird und formfield propBacklink hat einen Wert, die folgenden 3 Felder (X, Y, Z) sind auch gültig. Dies ist unabhängig von ihren Werten, da sie nur gelesen werden. Ein Ajax-Aufruf wird zurückgegeben, wenn sie basierend auf den Variablen in ihren Ajax-Aufrufen wahr oder falsch sind.jQuery validate nächsten 3 Formularfelder Onkeyup, wenn vorherige Formularfelder gefüllt

Mein Problem ist, wie kann ich die Validierung von Feldern (X, Y, Z) Onkeyup von Formfield propBacklink erzwingen?

propBacklink: { 
 
    required: false, 
 
    url: true, 
 
    remote: { 
 
\t url: "backlinkInDB.php", 
 
\t type: "post" 
 
    }, 
 
    rules: { 
 
\t CheckNextFields: true 
 
    } 
 
}, 
 

 
$.validator.addMethod("CheckNextFields", function(value) { 
 

 
\t this.element($("[name='X']")).validate(); 
 
\t this.element($("[name='Y']")).validate(); 
 
\t this.element($("[name='Z']")).validate(); 
 

 
});

+0

Sie können kein Code-Snippet ausführen, wenn der Code fehlt. Mit anderen Worten, das JavaScript ist nutzlos ohne das relevante HTML. Bearbeitet, um das Snippet zu entfernen. – Sparky

+0

Ihre Frage ist unklar. Standardmäßig wird die Validierung auch bei 'keyup' und bei' focusout' ausgelöst. Fragen Sie, wie Sie die Validierung basierend auf anderen Ereignissen auslösen können? – Sparky

+0

Oh, Entschuldigung. Hoffe dieser Zusatz erklärt besser: In der Tat wird das aktuelle Formularfeld mit Fokus auf Keyup validiert. Aber ich will auch, dass die Felder X, Y, Z auf Schlüssel von Formularfeld A validiert werden. – Peps

Antwort

0

Da Ihr OP überhaupt keinen Code enthält, wird meine Antwort nicht Code enthalten ...

wie kann ich die Validierung von Feldern (X, Y, Z-Kraft) onkeyup von formfield propBacklink?

Standardmäßig wertet das Plugin das gesamte Formular auf der click von einreichen, und jedes Feld einzeln auf keyup und auf focusout(auf click für radio, checkbox und select.)

Da Sie Möchten Sie eine Gruppe von Feldern auswerten, wenn das Feld propBacklink ausgelöst wird, müssen Sie eine neue Methode (Regel) für propBacklink mit the .addMethod() method schreiben.

  • Innerhalb dieser benutzerdefinierten Funktion können Sie die Validierung auf ein beliebiges Element auslösen this.element() verwenden.

    this.element(element); // the field being evaluated by the custom method: propBacklink 
    this.element($('[name="X"]')); // field with name="X" 
    
  • Nur zuweisen oder diese neue Regel deklarieren zu einem Feld, propBacklink. X, Y und Z werden gemäß der this.element(), die in der Funktion Ihrer neuen benutzerdefinierten Regel enthalten ist, validiert.

  • Achten Sie auf die hundreds of examples posted here sowie die documentation within the tag Wiki.


EDIT:

Ich habe keine Ahnung, was Sie mit dieser Regelung auszulösen Validierung auf readonly Felder, die der Benutzer steuern, nicht direkt erreichen wollen können.

Im Folgenden wird geprüft, ob X, Y und Z gültig sind, und es wird ein Fehler zurückgegeben, wenn bei einigen von ihnen die Validierung fehlschlägt.

$.validator.addMethod("CheckNextFields", function(value, element) { 

    return this.optional(element) || (this.element($("[name='X']")) && this.element($("[name='Y']")) && this.element($("[name='Z']"))); 

}, "X, Y, and Z are not valid."); 

(Natürlich werden Sie auch einige Validierungsregeln X zuweisen müssen, Y und Z, wenn man sie überprüfen möchten. Ansonsten, was würden Sie auslösen?)

Das Format Ihres Regelobjekts ist auch etwas durcheinander. Sie sollten die Regeln in das rules Objekt einfügen. Sie bestehen aus Schlüssel: Wert-Paaren des Feldnamens und der Liste der Regeln für jeden.

$('#yourform').validate({ 
    rules: { 
     propBacklink: { 
      // rules for propBacklink 
      required: false, // <- superfluous (default) 
      url: true, 
      remote: { 
       url: "backlinkInDB.php", 
       type: "post" 
      }, 
      CheckNextFields: true 
     }, 
     X: { 
      // rules for X 
     }, 
     Y: { 
      // rules for Y 
     }, 
     Z: { 
      // rules for Z 
     }, 
     .... 
    }, 
    .... 
+0

Vielen Dank für Ihren Hinweis! Nach stundenlangem Suchen und Herumspielen bin ich mit dem Code oben gekommen, aber das klappt leider noch nicht. Was mache ich falsch? – Peps

+0

@Peps, immer noch nicht klar, was Sie tun, aber ich habe meine Antwort bearbeitet, um Ihnen zu zeigen, wie Ihre benutzerdefinierte Methode aussehen sollte. – Sparky

Verwandte Themen