i Créez des éléments d'entrée dynamiques avec ce code:
<div id="add">Add row</div>
<script>
$(document).on('click', '#add', function() {
var number = $('div[id^="row_"]').length + 1;
$('#add').before('<div id="row_'+number+'"><label for="answer_'+number+'">Question #'+number+'</label> <input id="answer_'+number+'" name="answer_'+number+'" type="text"></div>');
});
</script>
3 Réponses :
Lors de l'affichage du formulaire, le navigateur navigue vers l'emplacement (URL) de votre Si vous voulez garder cet état, vous devez envoyer le formulaire via AJAX. Vous pouvez le faire avec JQuery aussi ( voir ici ). Ensuite, vous n'avez même pas besoin de toucher le bouton arrière. P> action code>. Lorsque vous revenez ensuite, il rechargera votre page et l'état de tous les scripts est réinitialisé car la page rechargée. P>
Merci pour la suggestion. Malheureusement, je dois trouver une solution pour le bouton arrière.
Envoyez le formulaire via AJAX? Jusqu'où? Je n'ai vu aucune mention d'une base de données ou d'un mécanisme de stockage ici.
Je pense que je comprends peut-être bien votre problème maintenant après avoir discuté, j'espère quand même! - p>
Lorsque vous téléchargez une page dans Chrome ou votre navigateur, il est stocké dans votre cache de navigateur local. Mais il stocke les commandes, pas l'état, de la page. Donc, lorsque vous revenez en arrière, le HTML est répercuté par les commandes HTML et CSS, et le JS est ré-exécuté. J'ai trouvé des informations de v8.com, le blog officiel de Dev pour Chrome ... P>
Lorsque le fichier JS est demandé une seconde fois (c'est-à-dire une exécution chaleureuse), Chrome prend le fichier dans le cache du navigateur et la donne à nouveau à V8 de compiler. Cette fois, cependant, le code compilé est sérialisé et est connecté au fichier de script mis en cache comme métadonnées. P>
blockQuote>
Donc, vous voyez, il recompille et redevance le JavaScript lorsque vous appuyez sur le bouton arrière, mais cela ne restauré pas les éléments précédents générés à partir du dernier fonctionnement JavaScript ou des événements que l'utilisateur s'est engagé à déclencher cet état. p>
Source: v8.com: Cache de code pour les développeurs JavaScript strong> P>
Cache de back-avance (BFCACHE) / Cache de navigateur forte> em> p>
Ne mélangez pas cela avec des données de formulaire cached em>, qui est complètement différente. em> chrome mettra en cache vos anciennes données de formulaire avec le bouton arrière automatiquement, mais ce n'est pas partie de la fonctionnalité de mise en cache de code. Consultez cette question similaire pour ce problème: Effacer tous les champs d'un formulaire lors de votre retour avec le bouton Back Backer P>
Google 2019, mise à jour février: Cela semble être quelque chose qui devrait être fixé à un moment donné dans un proche avenir. Source: Explorer un cache arrière / avancement pour chrome fort> a >. P>
Voici une solution: p>
J'ai essayé de mettre le texte de l'utilisateur dans un type = "caché" via jQuery, et il a été perdu, après la touche arrière, si je mettez la réponse à un type = "texte" avec style = " Affichage: Aucun ", j'ai le texte de l'utilisateur après le bouton arrière et je peux recréer les champs dynamiques avec le texte de l'utilisateur. P>
Merci à tout le monde pour les suggestions, j'espère que cela aidera les autres qui rencontrent ce problème. P>
Votre solution était juste Style = "Affichage: Aucun;" code>? Ma suggestion ci-dessous a-t-elle une aide lorsque j'ai dit que les choses étaient "répertoriées par les commandes HTML et CSS"? Il semble que vous veniez de prendre mon conseil, puis de faire une commande CSS correspondante à la place du JavaScript?
Vous avez dit que je dois utiliser "code côté serveur avec DB, cache locale, etc." Heureusement, j'ai trouvé une approche différente que j'avais au début, je ne savais pas que le type d'entrée = "caché" agit différemment du type d'entrée = "Texte" dans cette affaire.
C'est à ce moment-là que je parlais avec vous pour déterminer le problème, alors je pouvais savoir ce qui n'allait pas avant de répondre. Rien dans ma réponse ci-dessous n'a rien à voir avec dB, n'est-ce pas? Vous voyez, j'ai essayé de vous parler de la question, au lieu de vous précipiter pour écrire ma propre réponse, sans révéler d'informations à ce sujet.