Je crée une application Web pour gérer le produit SKUS. Une partie de cela consiste à associer des SKU aux noms de produits. Sur chaque ligne d'un tableau, j'énumère une référence et affiche une boîte <select>
Avec les noms des produits. Le produit actuellement associé à cette référence dans la base de données reçoit un attribut comme selected="selected"
. Cela peut être modifié et mis à jour via AJAX.
Il y a lot de produit <option>
S - 103 pour être exact - et cette liste est répétée dans le <select>
Sur chaque ligne.
À partir d'une autre entrée sur la page, j'utilise jQuery AJAX demandes pour ajouter de nouvelles associations SKU/produit, et pour qu'il soit clair qu'elles sont ajoutées instantanément, je les insère dans le en haut du tableau avec un petit effet de surbrillance. Comme le nombre de SKU augmente au-delà de 10 environ, si je rafraîchis la page (qui charge tout en arrière de la base de données commandée par nom de produit), Firefox commence à afficher certains options incorrectes sélectionnées par défaut. L'option incorrecte n'est pas cohérente, mais il semble mélanger les options qui existaient avant le rechargement de la page.
Si j'inspecte le <select>
À l'aide de Firebug, le select="selected"
Est sur la bonne balise <option>
. L'actualisation de la page (ou le fait de quitter et de taper l'URL de cette page pour revenir) ne la fait pas apparaître correctement, mais l'actualisation matérielle (Ctrl + F5) le fait.
Les deux Chrome et IE7 affichent cela correctement en premier lieu.
Ma théorie est que cela est le résultat d'une stratégie de cache défectueuse de Firefox. Est-ce que ça sonne bien? Existe-t-il un moyen de dire dans mon code "si cette page est actualisée, faites-en une actualisation matérielle - tout recharger à partir de zéro?"
Pour résoudre ce problème, j'ai changé de stratégie.
<select>
Avec une longue liste de <option>
S sur chaque ligne du tableau, avec la valeur actuelle définie par défaut<span>
. Si l'utilisateur clique sur un bouton "modifier", je remplace le <span>
Par un <select>
, Et le bouton "modifier" devient un bouton "confirmer". S'ils modifient les options et cliquent sur confirmer, AJAX met à jour la base de données, le et le <select>
Redevient un <span>
, Cette fois avec la nouvelle valeur.Cela présente deux avantages:
<option>
S redondants)Firefox conserve les éléments de formulaire sélectionnés lors de l'actualisation. C'est intentionnel. Ctrl + F5 est un rafraîchissement "dur", qui désactive ce comportement.
-
Ou Commande + Maj + R si vous êtes sur un Mac
J'ai eu un problème similaire, mais après avoir ajouté autocomplete="off"
Attribut HTML à chaque balise de sélection utilisée. [J'utilisais Firefox 8]
Un moyen simple d'empêcher Firefox de mettre en cache la dernière option sélectionnée consiste à supprimer tous les éléments d'option lors du déchargement de la page. Par exemple (en supposant que jQuery):
$(window).unload(function() {
$('select option').remove();
});
J'ai eu ce même problème. J'essayais de changer la valeur de la sélection en fonction de l'option choisie = "sélectionné", mais Firefox ne fonctionnait pas. Il serait toujours par défaut à la première option.
Chrome, Safari, etc. ont fonctionné lorsque j'ai fait cela:
$( 'option[value="myVal"]' ).attr( 'selected', 'selected' );
... mais cela ne fonctionnait pas dans FF.
J'ai donc essayé:
$( 'option[value="myVal"]' ).prop( 'selected', 'selected' );
et il fonctionne.
jQuery v1.9.1
Je l'ai fait fonctionner en mettant l'autocomplete = "off" sur l'entrée cachée.
Bien que ce soit une vieille question, mais la solution ci-dessous peut aider quelqu'un
Dans Firefox, j'ai remarqué que l'attribut "sélectionné" ne fonctionnera que si vous placez le sélectionner à l'intérieur d'un formulaire, où le le formulaire a un attribut de nom.
<form name="test_form" method="POST">
<select name="city">
<option value="1">Test</option>
<option selected="selected" value="2">Test2</option>
</selecct>
Rappelez-vous encore:
Pour info: afin d'empêcher Firefox de restaurer l'option précédemment sélectionnée après le rechargement de la page, vous pouvez placer l'intégralité de <form>
contenant le <select>
options dans un <iframe>
.
Lorsque les cases de sélection sont dans <iframe>
et vous rechargez la page du conteneur, Firefox se comporte enfin comme TOUS les autres navigateurs, en réinitialisant simplement les options de sélection.
Firebug a une fonction de désactivation du cache pour exactement ce scénario.
La solution à long terme la plus approfondie consiste à déterminer comment définir les en-têtes sans cache côté serveur. Quel serveur Web utilisez-vous?
Chaque fois que j'avais des bogues d'option de sélection étranges dans Firefox, c'était parce que j'avais plusieurs options marquées comme sélectionnées. Êtes-vous bien sûr qu'un seul est marqué comme tel? On dirait que vous pourriez sortir du wack assez facilement si vous changez cela avec AJAX.
Merci à @BananaDeveloper ( https://stackoverflow.com/a/8258154/2182349 ) - c'est ma solution pour résoudre ce problème sur une seule page dans une application
Je ne voulais pas personnaliser le code d'application open-off/open source
<Files "page_that_does_not_work.php">
SetOutputFilter INFLATE;SUBSTITUTE;DEFLATE
Substitute 's/<select/<select autocomplete="off"/n'
Substitute 's/<form/<form novalidate/n'
</Files>
Documents Apache pour mod_substitute
https://httpd.Apache.org/docs/2.4/mod/mod_substitute.html
Merci à: https://serverfault.com/questions/843905/Apache-mod-substitute-works-in-curl-but-not-on-browser pour le SetOutputFilter