web-dev-qa-db-fra.com

Ajouter une option vide en haut de la sélection et en faire l’option sélectionnée dans IE

HTML:

<select id="dropdown">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

jQuery:

$("#dropdown").prepend("<option value='' selected='selected'></option>");

Lorsque j'exécute ceci dans FireFox ou Chrome, l'option vierge insérée récemment sélectionnée est sélectionnée dans le menu déroulant. Quand je le lance dans IE8, Volvo a toujours sélectionné. Des idées?

http://jsfiddle.net/YFu2h/

25
wkm

Changez-le en ceci et ça va marcher:

$("#theSelectId").prepend("<option value=''></option>").val('');

http://jsfiddle.net/YFu2h/1/

Il semble que IE évalue uniquement l'attribut selected lorsqu'il rencontre pour la première fois select.

37
Joseph Silber

Je ne sais pas pourquoi votre code ne fonctionne pas (peut-être que cela a quelque chose à voir avec le fait que dans IE, selectedIndex est en lecture seule), mais que cela fonctionne dans IE:

$("#dropdown").prepend("<option value='' selected='selected'></option>");
$("#dropdown")[0].options[0].selected = true;
10
Mrchief

Essayer: 

$("#dropdown").prepend(new Option('', '', true, true));
$("#dropdown option:first").attr("selected", "selected");

Ou, si vous préférez:

$("#dropdown").prepend("<option value=''></option>");
$("#dropdown option:first").attr("selected", "selected");

L'utilisation de la première option est légèrement plus rapide. Les guillemets vierges désignent des valeurs et du texte vierges. Vous devez donc les renseigner au besoin. Vous n'avez pas besoin de l'attribut sélectionné dans le pré-ajout, nous les ajoutons ensuite. C'est quelque chose à voir avec Internet Explorer ne reconnaissant pas qu'il soit marqué comme sélectionné car il vient juste d'être créé.

3
rickyduck
$("#id").prepend("<option value=' ' selected='selected'></option>");

prepend ajoutera l'option to top et selected = 'selected' le fera sélectionner. Comme valeur = '', il s'agit donc d'une option de valeur vide.

1