Puis-je recharger la page en cours sans perdre aucune donnée de formulaire? J'ai utilisé..
window.location = window.location.href;
et
window.location.reload(true);
Mais ces deux choses ne peuvent pas obtenir des données de formulaire plus tôt pour moi. Qu'est-ce qui ne va pas ? Lorsque vous actualisez le navigateur manuellement, tout va bien (je ne perds aucune donnée de formulaire). S'il vous plaît guidez-moi comment le comprendre.
Voici mon code complet ...
<div class="form-actions">
<form>
<table cellpadding = "5" cellspacing ="10">
<tr class="control-group">
<td style="width: 100px;">
<div>Name: <font color="red">(*)</font></div>
</td>
<td>
<input type="text" id="inputName" placeholder="Name" required>
</td>
</tr>
<tr class="control-group">
<td>
<div>Email: <font color="red">(*)</font></div>
</td>
<td>
<input class="span3" placeholder="[email protected]" id= "inputEmail" type="email" required>
</td>
</tr>
<tr class="control-group">
<td>
<div>Phone: </div>
</td>
<td>
<input type="text" id="inputPhone" placeholder="phone number">
</td>
</tr>
<tr class="control-group">
<td>
<div>Subject: <font color="red">(*)</font></div>
</td>
<td>
<input type="text" id="inputSubject" placeholder="Subject" required>
</td>
</tr>
<tr class="control-group">
<td colspan ="2">
<div>
<div>Detail: </div>
<div class="controls">
<textarea id="inputDetail"></textarea>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<div>
<label style="font-weight: bold;" class="checkbox"> <input id="confirmCheck" value="" type="checkbox">
I Agree to the Personal information handling policy
</label>
</div>
<div id = "alert_placeholder"></div>
<div class="acceptment">
[Personal information handling policy]<br> <br>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<div align="center">
<button id="btnConfirm" class="btn btn-primary">Confirm</button>
<input type="reset" style="width: 65px; height: 27px;" id="btnReset" class="btn">
</div>
</td>
</tr>
</table>
</form>
</div>
Et à mon fichier JS ..
function bind() {
$('#btnConfirm').click(function(e) {
if ($('#confirmCheck').is(":checked")) {
getConfirmationForSendFAQ();
}
else {
e.preventDefault();
showalert("You should accept \"Personal Information Policy\" !", "alert-error");
}
});};function getConfirmationForSendFAQ() {
var name = $('#inputName').val();
var email = $('#inputEmail').val();
var phone = $('#inputPhone').val();
var subject = $('#inputSubject').val();
var detail = $('#inputDetail').val();
$('.form-actions').empty();
html = [];
html.Push("<table cellpadding ='8' class = 'submitInfo'");
html.Push("<tr>");
html.Push("<td class = 'title'>Name:</div>");
html.Push("<td class = 'value'>"+ name +"</td>");
html.Push("</tr>");
html.Push("<tr>");
html.Push("<td class = 'title'>Email Address:</div>");
html.Push("<td class = 'value'>"+ email +"</td>");
html.Push("</tr>");
if (phone.trim().length > 0) {
html.Push("<tr>");
html.Push("<td class = 'title'>Phone No:</div>");
html.Push("<td class = 'value'>"+ phone +"</td>");
html.Push("</tr>");
}
html.Push("<tr>");
html.Push("<td class = 'title'>Subject:</div>");
html.Push("<td class = 'value'>"+ subject +"</td>");
html.Push("</tr>");
html.Push("<tr>");
html.Push("<td class = 'title'>Detail Info:</div>");
html.Push("<td class = 'value'>"+ detail +"</td>");
html.Push("</tr>");
html.Push("<tr>");
html.Push("<td colspan='2'><div align = 'center'>");
html.Push("<button id='btnSend' class='btn btn-primary' style='width: 65px;'>Send</button>");
html.Push("<button id='btnReturn' class='btn btn-inverse' style='width: 65px; height: 27px; margin-left: 5px;'>Return</button>");
html.Push("</div></td></tr>");
html.Push("</table>");
$('.form-actions').append(html.join(''));
$('#btnReturn').click(function(e) {
// HERE I WANT TO KNOW HOW TO DO.....
});
$('#btnSend').click(function(e) {
alert("Doom");
});}
Vous pouvez utiliser divers mécanismes de stockage locaux pour stocker ces données dans le navigateur, tels que Stockage Web, IndexedDB, WebSQL (obsolète) et File API (obsolète et disponible uniquement dans Chrome) (et UserData avec IE).
La solution la plus simple et la plus largement prise en charge est WebStorage où vous disposez d'un stockage persistant (localStorage
) ou d'une session (sessionStorage
) qui est en mémoire jusqu'à la fermeture du navigateur. Les deux partagent la même API.
Vous pouvez par exemple (simplifié) faire quelque chose comme ceci lorsque la page est sur le point de recharger:
window.onbeforeunload = function() {
localStorage.setItem("name", $('#inputName').val());
localStorage.setItem("email", $('#inputEmail').val());
localStorage.setItem("phone", $('#inputPhone').val());
localStorage.setItem("subject", $('#inputSubject').val());
localStorage.setItem("detail", $('#inputDetail').val());
// ...
}
Le stockage Web fonctionne de manière synchrone, donc peut fonctionner ici. Vous pouvez éventuellement stocker les données pour chaque événement de flou sur les éléments où les données sont entrées.
Au chargement de la page, vous pouvez vérifier:
window.onload = function() {
var name = localStorage.getItem("name");
if (name !== null) $('#inputName').val("name");
// ...
}
getItem
renvoie null
si les données n'existent pas.
Utilisez sessionStorage
au lieu de localStorage
si vous souhaitez stocker uniquement temporaire.
J'ai modifié le code de K3N pour qu'il réponde à mes besoins et j'ai ajouté quelques commentaires pour aider les autres à comprendre le fonctionnement de sessionStorage.
<script>
// Run on page load
window.onload = function() {
// If sessionStorage is storing default values (ex. name), exit the function and do not restore data
if (sessionStorage.getItem('name') == "name") {
return;
}
// If values are not blank, restore them to the fields
var name = sessionStorage.getItem('name');
if (name !== null) $('#inputName').val(name);
var email = sessionStorage.getItem('email');
if (email !== null) $('#inputEmail').val(email);
var subject= sessionStorage.getItem('subject');
if (subject!== null) $('#inputSubject').val(subject);
var message= sessionStorage.getItem('message');
if (message!== null) $('#inputMessage').val(message);
}
// Before refreshing the page, save the form data to sessionStorage
window.onbeforeunload = function() {
sessionStorage.setItem("name", $('#inputName').val());
sessionStorage.setItem("email", $('#inputEmail').val());
sessionStorage.setItem("subject", $('#inputSubject').val());
sessionStorage.setItem("message", $('#inputMessage').val());
}
</script>
Trouvez ceci sur GitHub. Spécialement créé pour cela.
Cette réponse m'a été extrêmement utile et évite de parcourir chaque champ manuellement:
Utilisation de jQuery pour stocker l'état d'un formulaire compliqué
window.location.reload() // without passing true as argument
travaille pour moi.
Comme le mentionnent certaines réponses, localStorage est une bonne option et vous pouvez le faire vous-même, mais si vous recherchez une option raffinée, il existe déjà un projet sur GitHub appelé garlic.js .
En général, je soumets automatiquement mon propre formulaire au serveur et je recharge la page avec des arguments complétés Remplacez les arguments d’espace réservé par les paramètres reçus par votre serveur.
D'accord avec le stockage local HTML5 ..___. Ceci est un exemple de code
Vous devez soumettre des données et recharger une page (formulaire de rendu côté serveur avec des données), un simple rechargement ne préservera pas les données. C’est juste que votre navigateur peut mettre en cache les données du formulaire lors de l’actualisation manuelle (différent de celui des navigateurs).
Vous pouvez utiliser localStorage ( http://www.w3schools.com/html/html5_webstorage.asp ) pour enregistrer des valeurs avant d'actualiser la page.
Vous pouvez utiliser une bibliothèque que j'ai écrite, FormPersistence.js , qui gère la (dés) sérialisation des formulaires en enregistrant les valeurs dans le stockage local/de session. Cette approche est similaire à celle liée dans une autre réponse mais elle ne nécessite pas jQuery et n'enregistre pas les mots de passe en clair dans le stockage Web.
let myForm = document.getElementById('#my-form')
window.addEventListener('beforeunload', () => FormPersistence.save(myForm, true))
window.addEventListener('onload', () => FormPersistence.load(myForm, true))
Si vous souhaitez effacer les données stockées lors d'une soumission de formulaire réussie:
myForm.addEventListener('submit', () => FormPersistence.clearStorage(myForm, true))
Le deuxième paramètre de chaque fonction FormPersistence
définit s'il faut utiliser le stockage local (false
/absent) ou le stockage de session (true
). Dans votre cas, le stockage de session est probablement plus approprié.
Enregistrez un écouteur d'événement pour l'événement keyup
:
document.getElementById("input").addEventListener("keyup", function(e){
var someVarName = input.value;
sessionStorage.setItem("someVarKey", someVarName);
input.value = sessionStorage.getItem("someVarKey");
});