2010-05-14 5 views
1

j'ai le script simple suivantdocument.getElementById(). InnerHTML pour la balise select ne fonctionne pas dans IE


<input type="button" onclick="document.getElementById('a').innerHTML = '<option>something</option>';"/>  
<select id="a" style="width: 150px;"> 
</select> 

mais il ne fonctionne pas dans IE. pourriez-vous me dire pourquoi? merci

+0

Relatif, question précédente sur la façon de navigateur croisé d'ajouter une option: http://stackoverflow.com/questions/292101/browser-neutral-way-to-add-options-to-a-select-element-in -javascript/292122 # 292122 –

+0

Voir http://stackoverflow.com/questions/1848588/why-does-html-work-and-not-innerhtml-or-appendchild/1849100#1849100 –

Répondre

2

Il vous sera mieux d'avoir le script AJAX retourner un objet JSON contenant les options que vous voulez, puis en utilisant des méthodes DOM pour créer les nœuds d'option pour les faire correspondre.

Si vous devez vraiment le faire avec les chaînes HTML, la façon de le faire est d'écrire un tout nouvel élément <select> avec les options à l'intérieur. Vous pouvez ensuite copier les informations des noeuds <option> dans la sélection que vous visiez initialement.

var select= document.getElementById('a'); 
select.options.length= 0; 

var div= document.createElement('div'); 
div.innerHTML= '<select>'+options+'</select>'; 
var options= div.firstChild.options; 
for (var i= 0; i<options.length; i++) { 
    var o= options[i]; 
    select.options[i]= new Option(o.text, o.value, o.selected); 
} 
+0

merci l'homme, je pensais sur toute la journée je ne sais pas json du tout, peut-être vous pouvez donner un lien, là je peux lire à leur sujet? – Simon

0

IE n'a pas tendance à aimer faire des choses comme ça pour de tels articles. Il en va de même pour le réglage des tables innerHTML.

Vous devriez apprendre à faire les choses comme DOM .... par exemple, en utilisant createElement ("OPTION"), puis appendChild() (retirant d'abord les enfants avec removeChild() si nécessaire). En général, il est bien mieux que innerHTML.

0

Utilisez ce code:

var optionElement = document.createElement("option"); 
optionElement.innerHTML = "some text here"; 

document.getElementById('a').appendChild(optionElement); 
+0

oui, ça fonctionne, mais j'utilise ajax, et dans le fichier php je génère la liste des options prêtes, dans ce cas, je ne peux pas utiliser la méthode appendChild :( – Simon

1

Ou tout simplement utiliser jQuery et html() au lieu de innerHTML ...

Alors ...

$("#a").html("<option>Whatever</option>"); 

fonctionne très bien dans tous les navigateurs pour tous les objets!

Questions connexes