72 votes

Pourquoi ne pas Firefox afficher la bonne valeur par défaut, sélectionnez l'option?

Je suis en train de faire une application web pour gérer les RÉFÉRENCES produits. Une partie de qui est d'associer les Références à des noms de produits. Sur chaque ligne d'une table, je liste SKU et afficher un <select> boîte avec des noms de produits. Les produits associés à cette SKU dans la base de données est donné un attribut comme selected="selected". Ceci peut être modifié et mis à jour via AJAX.

Il y a beaucoup de produit <option>s - 103 pour être exact, et cette liste est répétée dans l' <select> sur chaque ligne.

À partir d'une autre entrée sur la page, je suis à l'aide de jQuery AJAX demandes d'ajout de nouveaux SKU/associations de produits, et de le rendre clair qu'ils sont ajoutés instantanément, je les insérer dans le haut de la table avec un peu de mettre en évidence d'effet. Comme le nombre de Références augmente au-delà de 10 ou alors, si j'actualise la page (qui charge tout l'arrière de la base de données commandé par nom de produit), Firefox commence à montrer quelques mauvaises options sélectionnées par défaut. Elle n'est pas conforme à propos de qui option incorrecte il montre, mais il semble être un mélange des options qui existaient avant le rechargement de la page.

Si je inspecter l' <select> à l'aide de Firebug, l' select="selected" est sur la bonne <option> balise. L'actualisation de la page (ou à la sortie et en tapant cette URL de la page retour à retour) ne pas s'afficher correctement, mais dur rafraîchissant (Ctrl+F5) ne.

Chrome et IE7 afficher correctement en premier lieu.

Ma théorie est que c'est un résultat d'une mauvaise stratégie de cache de Firefox. Est-ce que son droit? Est-il possible que je peux dire dans mon code "si cette page est actualisée en faire un rafraîchissement - recharger tout à partir de zéro?"

Mise à jour

Pour résoudre ce problème, j'ai changé de stratégies.

  • Précédemment, j'ai mis un <select> avec une longue liste d' <option>s sur chaque ligne de la table, avec le courant de la valeur par défaut
  • Maintenant, j'ai mis la valeur de courant en <span>. Si l'utilisateur clique sur un bouton "modifier", j'ai remplacer l' <span> avec un <select>, et le bouton "modifier" devient un bouton "confirmer". Si ils changent les options et cliquez sur confirmer, AJAX mises à jour de la base de données et l' <select> remonte à être un <span>, cette fois avec la nouvelle valeur.

Ceci a deux avantages:

  • Il corrige le bug décrit ci-dessus
  • Il nécessite beaucoup moins d'éléments du DOM de la page (tous ceux redondant <option>s)

115voto

BananaDeveloper Points 423

J'ai eu un problème similaire, mais après l'ajout d' autocomplete="off" attribut HTML pour chaque balise select, il a travaillé. [J'ai été en utilisant Firefox 8]

48voto

Ted Mielczarek Points 1996

Firefox conserve vos sélectionné les éléments de formulaire lors de l'actualisation. C'est intentionnel. Ctrl+F5 est un "dur" de l'actualisation, qui permet de désactiver ce comportement.

--

Ou Commande+Maj+R si vous êtes sur un Mac

16voto

ozu Points 41

Un moyen simple d'empêcher Firefox à partir de la mise en cache de la dernière option sélectionnée est de supprimer toutes les options éléments sur la page décharger. Par exemple (en supposant jQuery):

$(window).unload(function() {
  $('select option').remove();
});

12voto

gatebasher_311 Points 93

J'ai eu ce même problème. J'ai essayé de modifier la valeur de la sélectionner en fonction de l'option qui a selected="selected", mais Firefox ne fonctionnait pas. Il serait pour toujours par défaut à la première option.

Chrome, Safari, etc travaillé quand j'ai fait cela:

$( 'option[value="myVal"]' ).attr( 'selected', 'selected' );

... mais ce n'étais pas de travail dans FF.

J'ai donc essayé:

$( 'option[value="myVal"]' ).prop( 'selected', 'selected' );

et il fonctionne.

jQuery v1.9.1

0voto

lod3n Points 2475

Firebug dispose d'un cache de désactiver la fonction de ce scénario.

Le plus profond solution à long terme est de travailler sur la façon de définir sans en-têtes de cache côté serveur. Ce serveur web utilisez-vous?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X