2010-10-18 14 views
1

J'ai un <select> qui selon les options précédentes est rempli par un var avec un tas de valeurs <option>.Ajout d'options de sélection - Problème IE/solution entraînant d'autres problèmes de navigateur

Naturellement, parce que IE ne fonctionne pas avec innerHTML, je dois ajouter ce modèle au <select> qui fonctionne maintenant très bien dans IE. CEPENDANT j'ai maintenant besoin d'un moyen d'effacer les options de sélection de la recherche précédente et dans FF arrêter de tomber à la dernière <option> dans la liste.

+0

* J'ai un qui selon les options précédentes est rempli par un var avec un tas de valeurs. * - que "phrase" est indéchiffrable – Pointy

Répondre

0

bien en utilisant YUI3:

node.setContent(template); //removes old children, sets new template as content. 
    node.set('selectedIndex', 0); //forces FF to select the first one 

Edité avec de bonnes méthodes.

1

Réécrivez simplement le bloc de sélection entier en utilisant innerHTML, cela fonctionne toujours.

1

manière d'effacer toute épreuve les options d'un <select>:

while(select_control.length > 0) 
    select_control.options[0] = null 

Certains navigateurs effacer la liste si vous le faites select_control.length = 0 mais j'ai trouvé ce peu fiable.

chemin de l'option d'insérer toute épreuve:

var new_option = new Option(text, value) 
try { 
    select_control.add(new_option, select_control.options[0]) 
} catch(e) { 
    select_control.add(new_option, 0) 
} 

Le 0 est l'indice de l'élément que vous voulez que votre article avant. Pour ajouter à la fin, faire à la place:

select_control.options[select_control.length] = new_option 

Cela fonctionne aussi si vous voulez remplacer un élément spécifique, en spécifiant l'indice d'une option existante.

+0

C'est une bonne information, mais j'ai trouvé que l'exécution de la nouvelle option 100 fois dans une boucle verrouille IE sur certains ordinateurs. – user103219

+0

D'accord, je n'avais pas rencontré ce bug! Normalement, je veux seulement en ajouter un ou deux. Si j'ai une liste entière à repeupler, je rendrais normalement chaque liste et jouerais avec l'attribut CSS 'display' pour juste montrer le bon. (Bien sûr, le côté serveur doit également connaître l'élément de formulaire correct.) – staticsan