2016-04-15 23 views
2

Ich habe eine Formularseite, die ich mit Ajax einreichen möchte. Mein Plan ist es, 1. Überprüfen Sie, ob E-Mail bereits mit existiert Ajax 2. Überprüfen Sie, ob Passwörter 3. übereinstimmen Ist dies der Fall, schalten Sie auf einen anderen „Bildschirm“ und 4. Senden Sie das Formular mit AjaxAjax Callback nicht ausgeführt

Ich bin verwirrt, weil die Validierungsfunktion nicht ausgeführt wird. Es schaltet weder Bildschirme noch Warnungen, wenn Passwörter nicht übereinstimmen. Daher wird das Formular auch nicht übermittelt. Mein Code geht unter

$('form input:last-child').click(function(e){ 
    e.preventDefault(); 
    var allFields = e.target.parentNode; 

    function validate() { 
     if (allFields.elements[3].value !== allFields.elements[4].value) { 
      return false; // If they don't match, return false 
     } else { 
      $('#form-div form').css('left', '-70%'); 
      $('#confirm p').css('margin-left', '-12%'); // else switch screens 
     } 
    } 
    if (validate != false) { 
     $('#hidden').load("server_script.php"); // `hidden` is a hidden div somewhere on the page 
    } else 
     alert ("Passwords do not match"); 
}); 

Ich denke, wenn sie läuft nicht übereinstimmen, wird nicht der Rest des Ereignis-Listener, da die falschen auf die Funktion von diesem Punkt beendet. Also habe ich versucht, eine Instanz der Validierungsfunktion außerhalb des Ereignis-Listeners zu machen und sie innerhalb der click-Funktion aufzurufen, aber sie wird aufgrund von Abhängigkeitsvariablen nicht analysiert, so dass ich mir nicht sicher bin, wie ich das anstellen soll.

UPDATE Assoziierte HTML angehängt. (Bonus: das RegexMuster entspricht nicht 2 oder mehr Buchstaben)

<div id=form-div> 
<form method=POST action="" > 
First Name: <br> <input type=text name=first_name pattern="[a-z]{2,}" required /> <br> <br> 
Last Name: <br> <input type=text name=last_name pattern="[a-z]{2,}" required /> <br> <br> 
Email: <span id=emailReport></span> <br> <input type=email name=email id=email required /> <br> <br> 
Password: <br> <input type=password name=password required pattern=".{6,}" title="Password must be six or more characters" /> <br> <br> 
Confirm password: <br> <input type=password name=password required /> <br> <br> 
<input type=hidden name=sign_up_date /> 
<input type=submit value='sign up' /> 
</form> 

<div id=confirm> <p>Some text</p> </div> 
</div> 

</div> 
+0

ohne die damit verbundenen HTML seine schwer von Hilfe zu sein – RiggsFolly

+0

Was ist ' validiere! = falsch? –

+0

@RiggsFolly hinzugefügt die html –

Antwort

1

Sie haben vergessen, die Funktion 'validieren' aufzurufen. Wie es scheint, haben Sie die Funktion einfach erklärt, ohne ihn auszuführen.

+0

Eigentlich dachte er, er würde es anrufen, wenn Sie ein wenig genauer hinsehen – RiggsFolly

0

Die validate Funktion wird nicht aufgerufen wird. Warum nicht einfach die Funktionsdefinition entfernen, damit der Code Teil der Funktion click ist?

+0

Wenn ich ihn auspacke, wie teste ich dann auf nicht ähnliche Passwörter? –

+0

Sie könnten es außerhalb der Funktion 'click' als Standalone-Funktion verschieben und die Werte als Parameter übergeben:' function validate (pass1, pass2) ' – yk11

1

Sie sind nicht die Validate-Funktion aufrufen richtig

Funktionsaufrufe haben müssen die () dh validate() und nicht validate

$('form input:last-child').click(function(e){ 
    e.preventDefault(); 
    var allFields = e.target.parentNode; 

    function validate() { 
     if (allFields.elements[3].value !== allFields.elements[4].value) { 
      return false; // If they don't match, return false 
     } else { 
      $('#form-div form').css('left', '-70%'); 
      $('#confirm p').css('margin-left', '-12%'); // else switch screens 
     } 
    } 

    //if (validate != false) { 
    if (validate() != false) { 
     $('#hidden').load("server_script.php"); // `hidden` is a hidden div somewhere on the page 
    } else 
     alert ("Passwords do not match"); 
}); 
+0

Ich habe die Klammer hinzugefügt, aber das Skript lädt keine Wege. Der Grund, warum das ursprüngliche 'validate' nicht ausgeführt wurde, war, dass ich es nicht in einer separaten Zeile aufgerufen hatte. Bitte überprüfen Sie die akzeptierte Antwort –

+0

Dies würde die Funktion 'validate()' aufrufen, vorausgesetzt, dieser ganze Abschnitt von js-Code wurde tatsächlich aufgerufen. Wollen Sie sagen, dass dieser ganze Codeabschnitt nicht aufgerufen wurde? – RiggsFolly

Verwandte Themen