2010-12-08 24 views
0

Salut à tous, récemment je suis tombé sur un problème. Je ne suis pas en mesure d'ajouter des options à une zone de sélection avec le code ci-dessous ni les effacer dans IE. Y a-t-il un problème avec le code ci-dessous? Je n'ai vraiment aucune idée de pourquoi cela ne fonctionne pas dans Internet Explorer.Comment effacer correctement et ajouter des options pour travailler avec Internet Explorer?

Merci

+0

Pour commencer, JavaScript n'a pas de portée au niveau du bloc. Chaque itération de votre boucle 'for' remplacera la valeur précédente de' option'. Pourriez-vous poster un peu plus de code? –

+0

il n'est pas utilisé en dehors du bloc, donc cela n'a pas d'importance –

+0

@Matt: Cela ne pose aucun problème. L'instanciation de variable a lieu avant que toutes les instructions soient exécutées. Les deux extraits suivants sont équivalents: 'pour (var i = 0; i <3; ++ i) {var x = i; } 'et' var x; pour (var i = 0; i <3; ++ i) {x = i; } ' –

Répondre

2

n'a jamais écrit dans ma vie dojo, mais voici une tentative. Avec quelques conseils

blockSelect.innerHTML = '<option></option>'; 
console.log(data); 
for (var i in data.DATA) { 
    var item = data.DATA[i]; 
    dojo.create('option', 
     { 
      value: item[0], 
      label: item[0], // do you mean to set the innerHTML? 
      innerHTML: item[0] 
     }, 
     blockSelect); 
} 
+0

Si cela ne fonctionne toujours pas, essayez le commentaire de qw3n en supprimant la ligne qui définit la première option à une option vide –

+0

M'a aidé, merci. –

1

Je ne suis pas sûr de savoir comment répondre à votre question en utilisant Dojo, mais je soupçonne que votre problème peut avoir à faire avec un problème de longue date dans IE en utilisant innerHTML et la balise option. Je pense que la solution consiste à ajouter les éléments de l'option au parent au lieu d'essayer de définir le innerHTML.

2

Utilisez la propriété options de la liste de sélection. Vous pouvez l'effacer en définissant la propriété length à 0, et vous pouvez ajouter une nouvelle option en attribuant un nouvel objet Option comme le dernier élément de la collection options:

var opts = blockSelect.options; 
opts.length = 0; 
for (var i in data.DATA) { 
    console.log(data); 
    opts[opts.length] = new Option(data.DATA[i][0], data.DATA[i][0]); 
} 

Cela fonctionne dans tous les principaux navigateurs.

+0

Cela a aidé aussi, merci. – Darren

0

Pour toute personne qui obtient ce même problème ici est quel était le problème: Internet Explorer je devais utiliser streetSelect.options [streetSelect.selectedIndex] .value pour mes valeurs de contenu au lieu de streetSelect.value. Pour une raison quelconque, Internet Explorer ne lit pas cela.