2009-05-29 4 views
0

Je donne les résultats suivants:Comment puis-je obtenir Eval pour fonctionner correctement dans IE?

<select id="price_select"></select> 

J'ai un gestionnaire d'événements qui invoque les éléments suivants:

var selected_option = "one"; 
var option_one = "<option>Option Contents</option>"; 
document.getElementById('price_select').innerHTML = eval('option_' + selected_option); 

fonctionne très bien dans Firefox, mais pas dans IE6.

+0

Même si je n'ai aucun problème à faire ce que vous voulez, sachez ceci: utiliser eval() est généralement mal vu, surtout dans ce cas où il y a d'autres façons d'accomplir ce que vous essayez de faire ... –

Répondre

4

Ne pouvez-vous pas faire quelque chose comme ceci à la place?

var selected_option = "one"; 
var options = { "one": "<option>Option Contents</option>" }; 
document.getElementById('price_select').innerHTML = options[selected_option]; 
+0

Pourquoi? C'est un hachage, qui est comme une clé de tableau associatif => valeur. J'accède à l'élément options avec key = selected_option, qui sera "" (qui, btw, est une chaîne et n'a pas de propriété .text) :) – MartinodF

+0

J'ai réalisé mon erreur alors j'ai supprimé mon commentaire avant votre répondu. Désolé pour le dérangement. :) – karim79

+0

aucun problème du tout;) – MartinodF

0

innerHTML ne fonctionne pas dans IE6 dropdowns parce qu'il est un bug.

eval() fonctionne dans IE 6

0

essayez ceci:

eval("var x= " + ('option_' + selected_option)); 
document.getElementById('price_select').innerHTML = x; 
2

Travail hors de ce que dit marknt15 et MartinodF, vous devriez être en mesure d'utiliser la manipulation DOM natif pour faire ce que vous êtes essayer de faire sans utiliser eval().

var selected_option = "one"; 
var options = { "one": {"value": "0", "text":"OptionContents"} }; 
var e = document.createElement("option"); 

if(e.innerText) {// IE sets innerText like this 
    e.innerText = options[selected_option].text; 
} else { // W3C sets inner text like this 
    e.childNodes[0].nodeValue = options[selected_option].text; 
} 

e.value = options[selected_option].value; 

document.getElementById('price_select').appendChild(e); 

Vous voudrez peut-être envisager d'utiliser un framework JavaScript complet tels que jQuery ou Prototype de faire des choses comme cela plus facile à manipuler si.

Questions connexes