J’ai rencontré un problème où j’ai une balise select que l’utilisateur utiliserait pour sélectionner une marque de téléphone et la page utilisant jquery afficherait alors simplement ces téléphones.
Grâce à l’aide des utilisateurs du débordement de stack, cela fonctionne désormais très bien sur tous les navigateurs, à l’exception de Firefox. Pour une raison quelconque, lorsque j’actualise la page, la balise select affiche la dernière option sélectionnée, mais la page affiche tous les téléphones disponibles comme prévu. Quelqu’un a-t-il des suggestions ou des conseils sur l’utilisation de Firefox pour actualiser le tag sélectionné? Je ne peux pas le montrer sur js.fiddle car cela ne se produit pas là-bas. Voici un lien:
http://davidarabis.com/test/test.html
Et voici le code:
All Motorola HTC LG Samsung Kyocera
Le jquery:
$(document).ready(function() { $('.manufacturers').change(function() { var selected = $(this).find(':selected'); $('ul.manulist').hide(); if ($(this).val() == 'all') { $('.scroll-content ul').show(); } else { $('.' + selected.val()).show(); $('.optionvalue').html(selected.html()).attr( 'class', 'optionvalue ' + selected.val()); } }); });
Merci d’avance pour tout conseil ou aide.
FireFox mettra en cache les valeurs de formulaire (y compris la valeur sélectionnée d’une zone de select
) lorsque le mécanisme d’actualisation est activé normalement ( F5
). Toutefois, si un utilisateur choisit d’effectuer une actualisation matérielle ( Ctrl+F5
), ces valeurs ne seront pas extraites du cache et votre code fonctionnera comme prévu.
Comme les utilisateurs agissent de leur propre chef, vous devez fournir une solution pour couvrir les deux cas. Cela peut être fait en prenant plusieurs approches:
window.onbeforeunload
événements window.onbeforeunload
. ready
le DOM. window.onbeforeunload
sur le réseau de développeurs Mozilla Remarque: Il a été suggéré sur le post lié au SO , ainsi que ici dans les commentaires, de désactiver simplement la autocomplete
. Ce n’est cependant pas la meilleure solution pour deux raisons: a. Compatibilité: l’ autocomplete
– autocomplete
est un atsortingbut HTML5 , nous limitons donc notre implémentation de choix et b. Sémantique: Le but est de gérer le cas d’une actualisation de page. La autocomplete
– autocomplete
est destinée à contrôler la mise en cache de l’historique de session et à gérer les invites des contrôles de formulaire. Si cette implémentation devait changer dans le futur, cette solution serait brisée.
Je pense avoir une solution plus simple. Pourquoi ne pas remettre la sélection à l’index 0 lorsque le document est prêt? Cela pourrait ressembler à ceci:
$('.manufacturers').prop('selectedIndex',0);
Donc, votre script pourrait ressembler à ceci:
$(document).ready(function() { $('.manufacturers').prop('selectedIndex',0); $('.manufacturers').change(function() { var selected = $(this).find(':selected'); $('ul.manulist').hide(); if ($(this).val() == 'all') { $('.scroll-content ul').show(); } else { $('.' + selected.val()).show(); $('.optionvalue').html(selected.html()).attr( 'class', 'optionvalue ' + selected.val()); } }); });
Et après rechargement, la sélection reviendra à la première position.
Si votre balise select est dans un formulaire, vous pouvez simplement y append l’atsortingbut autocomplete="off"
et il se comportera comme prévu.