Pourquoi cela ne fonctionne-t-il pas dans IE8 pour désélectionner toutes les options dans une boîte de sélection multiligne?
$("#myselect").children().removeAttr("selected");
Y at-il un travail autour? Rien à quoi je pouvais penser (attr ("sélectionné", "") etc.) ne semble pas fonctionner.
MISE À JOUR: Voici un jsFiddle mis à jour. J'ai au moins obtenu qu'il se dégrade de sorte que dans IE8 la première option soit sélectionnée . Mais sans le hardcoded selected = 'selected' et l'appel .attr dont IE8 semble avoir besoin, il fait 3 choses différentes dans Firefox, Chrome et IE8! Voir cette version: , ce qui est simple et semble fonctionner:
Peut-être que je me suis rendu fou et qu'il y a une erreur quelque part que je ne vois pas?
C'est quelque chose dans la façon dont jQuery se traduit en IE8, pas nécessairement le navigateur lui-même.
J'ai pu contourner le problème en allant à la vieille école et en sortant de jQuery pour une ligne:
document.getElementById('myselect').selectedIndex = -1;
La question est posée de manière trompeuse. "Supprimer l'attribut selected
" et "désélectionner toutes les options" sont choses complètement différentes.
Pour désélectionner toutes les options de manière documentée et multi-navigateur, utilisez
$("select").val([]);
ou
// Note the use of .prop instead of .attr
$("select option").prop("selected", false);
Cela marche:
$("#myselect").find('option').removeAttr("selected");
ou
$("#myselect").find('option:selected').removeAttr("selected");
Utilisation de jQuery 1.9 et supérieur:
$("#mySelect :selected").prop('selected', false);
Similaire à la réponse de @ radiak, mais avec jQuery (voir ce document API et commenter la façon de changer le selectedIndex
).
$('#mySelectParent').find("select").prop("selectedIndex",-1);
Les avantages de cette approche sont:
#mySelectParent
dans l'exemple)Eh bien, j'ai passé beaucoup de temps sur cette question. Pour obtenir une réponse fonctionnant avec Chrome ET IE, j'ai dû changer mon approche. L'idée est d'éviter de supprimer l'option sélectionnée (car ne peut pas la supprimer correctement avec IE). => Cela implique de sélectionnez l'option non pas en ajoutant ou en définissant l'attribut sélectionné sur l'option, mais en choisissant une option au niveau "select" à l'aide de l'accessoire selectedIndex.
Avant :
$('#myselect option:contains("value")').attr('selected','selected');
$('#myselect option:contains("value")').removeAttr('selected'); => KO with IE
Après :
$('#myselect').prop('selectedIndex', $('#myselect option:contains("value")').index());
$('#myselect').prop('selectedIndex','-1'); => OK with all browsers
J'espère que cela vous aidera
Une autre alternative:
$('option:selected', $('#mySelectParent')).removeAttr("selected");
J'espère que ça aide