2017-03-21 6 views
0

Ich habe ein Formular, das nach dem Drücken der Senden-Schaltfläche Daten senden sollte. Nachdem ich einige Eingabefelder nach Bedarf markiert habe, zeigt das Formular immer dann an, wenn nach dem Drücken der Senden-Taste keine Eingabe in das gewünschte Feld erfolgt ist - so weit, so gut.Umleitung nach erfolgreichem Senden des Formulars

Was ich gerne realisieren würde ist, dass es eine Umleitung zu einer anderen Seite gibt, wenn die Einreichung erfolgreich war. Wenn es einige leere Pflichtfelder gibt, sollte das Formular mich zeigen, ohne mich auf eine andere Seite umzuleiten.

Inzwischen habe ich den folgenden Code:

Submit-Button:

<div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
    <button type="submit" name="submityes" id="submityes" class="btn btn-danger">Submit</button> 
     </div> 
    </div> 

Auch habe ich die folgende js Funktion, um das Formular abschicken und mich auf eine andere Seite zu umleiten:

$('document').ready(function() { 
"use strict"; 
$(function() { 
    $('#submityes').click(function() { 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       window.location.replace("/submit_resolved.php"); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 

});

Das Problem, das ich gerade habe, ist, dass ich immer auf die "submit_resolved.php" Seite weitergeleitet werde, ob alle erforderlichen Felder abgeschlossen sind oder nicht.

Wie kann ich dieses Problem lösen? Ich möchte nur umgeleitet werden, wenn alle Pflichtfelder nicht leer sind.

+1

Ihr aktueller Code nicht das * Formular * nicht einreichen, macht es eine Anfrage Ajax ohne zunächst jede Validierung zu tun. Warum führen Sie nicht einfach eine Standardübergabe (nicht Ajax) durch und kümmern sich dann um die Umleitung in Ihrem PHP? – nnnnnn

+0

Sie können Ihren Ereignis-Listener ändern, um auf 'submit' des Formulars zu warten, und dann das Attribut 'required' für Ihre HTML-Elemente verwenden .... Sie sollten' event.preventDefault(); 'hinzufügen, wenn Sie den Ereignislistener auf ändern horchen Sie für das Formular submit, um das Formular zu verhindern, indem es seine Standardaktion 'post' tut, also vielleicht das Formular mit einem Formular-Tag umhüllen .... – NewToJS

+0

Vielen Dank. Wie kann ich den Code ohne Ajax machen? Und was ist der Unterschied zwischen Ajax und nicht? –

Antwort

1

Sie an das submit Ereignis binden sollte, nicht click Ereignis:

AKTUALISIERT ZUBRINGEN DIE KOMMENTARE

$(function() { 

    var submityesClicked; 

    //catch the click to buttons 
    $('#submityes').click(function() { 
     submityesClicked = true; 
    }); 
    $('#submitno').click(function() { 
     submityesClicked = false; 
    }); 

    $('#webform').submit(function (e) { 
     e.preventDefault();//prevent the default action 

     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       window.location.replace(submityesClicked ? "/submit_resolved_yes.php" : "/submit_resolved_no.php"); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 

Das submit Ereignis ausgelöst wird nur, wenn die Form ist gültig.

Beachten Sie, dass das Ereignis submit durch das Formular ausgelöst wird, das Ereignis click jedoch vom Element input ausgelöst wird.

+0

Vielen Dank. Um also das Submit-Event zu binden, muss ich den Selektor von '#submityes' auf etwas anderes setzen. Leider bin ich mir nicht sicher, welchen Ausdruck ich dort schreiben soll. –

+0

Oh, ich glaube, ich habe es verstanden. Ich gab dem Formular den Namen/die ID "webform" und ich schrieb "#webform" anstelle von "#submityes" in die Klammern. Jetzt habe ich noch ein kleines Problem: Das Formular hat zwei verschiedene Submit-Buttons ('#submityes' und '#submitno'). Beide sollten den Benutzer auf eine andere Seite umleiten. Wie kann ich das in den Code implementieren? Es sollte etwas wie "wenn '#webform' über '#submityes' Weiterleitung an X gesendet wird, wenn es über '#submitno' Weiterleitung an Y ' –

+0

@ TimKühn gesendet wird, sehe meine aktualisierte Antwort? –

1

Umleitung auf komplett durchführen. Nicht auf Erfolg

$('document').ready(function() { 
"use strict"; 
$(function() { 
    $('#submityes').click(function() { 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       //window.location.replace("/submit_resolved.php"); 
      }, 
      complete: function() { 
       window.location.replace("/submit_resolved.php"); 
      } 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 
+0

Das OP möchte keine Umleitung, wenn das Formular nicht erfolgreich validiert wurde (wie, keine Umleitung, wenn die erforderlichen Felder leer gelassen wurden). – nnnnnn

+0

Vielleicht mein Missverständnis ... Aber wie auch immer zuerst müssen wir validieren - vor dem Senden, dann senden Sie die Anfrage über Ajax und wenn die Antwort erhalten - überprüfen Sie, ob alles ok und Prozess zum Erfolg führen. Wenn alles in Ordnung ist, müssen wir den Benutzer umleiten. Habe ich recht? –

0

Ich nehme an, Sie validieren Formular in process.php, so müssen Sie Fehler zurückgeben, wenn Validierung von process.php wie folgt fehlschlagen.

header('HTTP/1.1 500 Internal Server Booboo'); 
header('Content-Type: application/json; charset=UTF-8'); 
die(json_encode(array('message' => 'ERROR', 'code' => 1337))); 

Check this link: Return errors from PHP run via. AJAX?

Hoffnung Ihnen dies sehr nützlich sein.

0

Die einfachste, was man tun kann, ist, „erforderlich“ Attribut Eingabe elements.Example hinzuzufügen:

<form action="/action_page.php"> 
    Username: <input type="text" name="usrname" required> 
    <input type="submit"> 
</form> 

Es ist ein HTML5-Attribut, so dass kein JavaScript erforderlich. Und es wird von allen gängigen Browsern unterstützt.Überprüfen Sie diesen Link:

http://caniuse.com/#search=required

Wie auch immer, sollten Sie nicht nur auf Front-End-Prüfung verlassen. Überprüfen Sie diese Eingänge auch am Back-End.

+0

aber was passiert, wenn das Formular ist nicht aus der Sicht des Backend gültig? –

+0

das ist eine andere Frage –

0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
     <form action=""> 
      Username: <input type="text" id="usrname" required> 
      <button type="button" name="submityes" 
      id="submityes" class="btn btn-danger">Submit</button> 
     </form> 
    </div> 

function isValid(){ 
    var usrname = $("#usrname").val(); 
    if(usrname == ""){ 
     return false; 
    } 
    return true; 
} 
$(function() { 
    $('#submityes').submit(function() { 
    if(isValid() == true){ 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       alert("success"); 
       window.location.replace("/submit_resolved.php"); 
      }, 
     }); 
     }else{ 
     alert("error"); 
     } 
    }); 
}); 
+0

Vielen Dank. Ist die Funktion isValid() die Back-End-Validierung? Und ich denke, ich muss jede einzelne erforderliche Variable für diese Funktion überprüfen? –

+0

können Sie tun Es kann sowohl im Frontend als auch im Backend –

+0

Sie können formelemelets innerhalb einer for-Schleife verwenden, um alle Elemente in Ihren Formularen zu validieren –

Verwandte Themen