J'ai essayé différentes façons d'effacer un formulaire:
<form action="service.php" id="addRunner" name="addRunner" method="post">
First Name: <input type="text" name="txtFirstName" id="txtFirstName" /><br />
Last Name: <input type="text" name="txtLastName" id="txtLastName" /><br />
Gender: <select id="ddlGender" name="ddlGender"><option value="">--Please Select--</option>
<option value="f">Female</option>
<option value="m">Male</option>
</select><br />
Finish Time:
<input type="text" name="txtMinutes" id="txtMinutes" size="10" maxlength="2">(Minutes)
<input type="text" name="txtSeconds" id="txtSeconds" size="10" maxlength="2">(Seconds)
<br />
<button type="submit" name="btnSave" id="btnSave">Add Runner</button>
<input type="hidden" name="action" value="addRunner" id="action">
</form>
jQuery # 1:
function clearInputs(){
$("#txtFirstName").val('');
$("#txtLastName").val('');
$("#ddlGender").val('');
$("#txtMinutes").val('');
$("#txtSeconds").val('');
}
Cela fonctionne parfaitement.
jQuery # 2:
function clearInputs(data){
$("#addRunner :input").each(function(){
$(this).val('');
});
Ceci efface le formulaire mais ne me permet plus de lui soumettre aucune information. J'essaie de cliquer à nouveau sur le bouton et cela ne fait rien.
Voici le gestionnaire de clic sur le bouton:
$("#btnSave").click(function(){
var data = $("#addRunner :input").serializeArray();
$.post($("#addRunner").attr('action'), data, function(json){
if (json.status == "fail"){
alert(json.message);
}
if (json.status == "success"){
alert(json.message);
clearInputs();
}
}, "json");
});
Code postal PHP:
<?php
if($_POST){
if ($_POST['action'] == 'addRunner') {
$fname = htmlspecialchars($_POST['txtFirstName']);
$lname = htmlspecialchars($_POST['txtLastName']);
$gender = htmlspecialchars($_POST['ddlGender']);
$minutes = htmlspecialchars($_POST['txtMinutes']);
$seconds = htmlspecialchars($_POST['txtSeconds']);
if(preg_match('/[^\w\s]/i', $fname) || preg_match('/[^\w\s]/i', $lname)) {
fail('Invalid name provided.');
}
if( empty($fname) || empty($lname) ) {
fail('Please enter a first and last name.');
}
if( empty($gender) ) {
fail('Please select a gender.');
}
if( empty($minutes) || empty($seconds) ) {
fail('Please enter minutes and seconds.');
}
$time = $minutes.":".$seconds;
$query = "INSERT INTO runners SET first_name='$fname', last_name='$lname', gender='$gender', finish_time='$time'";
$result = db_connection($query);
if ($result) {
$msg = "Runner: ".$fname." ".$lname." added successfully" ;
success($msg);
} else {
fail('Insert failed.');
}
exit;
}
}
Si j'utilise la méthode jQuery # 2, j'obtiens cette erreur dans la console:
Uncaught TypeError: Cannot read property 'status' of null
Pourquoi cela arrive-t-il?
J'ai oublié d'inclure cette information clé:
function fail ($message){
die(json_encode(array('status'=>'fail', 'message'=>$message)));
}
function success ($message){
die(json_encode(array('status'=>'success', 'message'=>$message)));
Cela renvoie le message à la fonction AJAX dans jQuery. Il semble qu'après avoir soumis le formulaire une fois à l'aide de la méthode n ° 2, les messages de réussite/d'échec sont supprimés.
Démo: http://jsfiddle.net/xavi3r/D3prt/
$(':input','#myform')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
Réponse originale: Réinitialisation d'un formulaire à plusieurs étapes avec jQuery
La suggestion de Mike (parmi les commentaires) de conserver la case à cocher et de la sélectionner intacte!
Attention: Si vous créez des éléments (afin qu'ils ne soient pas dans le dom), remplacez :hidden
par [type=hidden]
sinon tous les champs seront ignorés!
$(':input','#myform')
.removeAttr('checked')
.removeAttr('selected')
.not(':button, :submit, :reset, :hidden, :radio, :checkbox')
.val('');
Je recommanderais d'utiliser le bon vieux javascript:
document.getElementById("addRunner").reset();
Il a fallu quelques recherches et lectures pour trouver une méthode adaptée à ma situation. Lors de la soumission du formulaire, exécutez ajax sur un script php distant, informez l'utilisateur de la réussite ou de l'échec, puis complétez le formulaire.
J'avais quelques valeurs par défaut, toutes les autres méthodes impliquées .val ('') ne réinitialisant donc pas mais effaçant le formulaire.
Je travaille aussi en ajoutant un bouton de réinitialisation au formulaire, dont l'identifiant est myform
:
$("#myform > input[type=reset]").trigger('click');
Pour moi, cela a eu le résultat correct sur la réinitialisation du formulaire, oh et n'oubliez pas le
event.preventDefault();
pour arrêter la soumission du formulaire dans le navigateur, comme je l’ai fait :).
Cordialement
Jacko
Vous pouvez essayer
$("#addRunner input").each(function(){ ... });
Les entrées ne sont pas des sélecteurs, vous n'avez donc pas besoin du :
Ne l'avez pas testé avec votre code. Juste une devinette rapide!
J'ai compris ce que c'était! Lorsque j'ai effacé les champs à l'aide de la méthode each (), le champ caché que le php devait exécuter était également effacé:
if ($_POST['action'] == 'addRunner')
J'ai utilisé le: not () sur la sélection pour l'empêcher de vider le champ caché.