IE 6 Javascript remplacement sélectionnez problème déroulant

voix
0

Je le code suivant - il est utilisé pour charger un menu déroulant lorsque l'utilisateur clique sur un menu déroulant avec seulement l'option par défaut chargée car cette baisse est en baisse assez importante et qui ne représentent pas comme ça beaucoup. Voici le code:

function populateDropDown(id, code) {
    var currentSelect = document.getElementById(id);
    <%--Don't enable the dropdown if it has more than one entry already - assume this to be populated.--%>
    if(currentSelect.length == 1) {
            currentSelect.remove(0);
            var selectedIndex = 0;
            for(var index = 0; index < codes.length; index++) {
                    var newOption = document.createElement('option');
                    newOption.value = codes[index];
                    newOption.text = values[index];
                    try {
                            currentSelect.add(newOption, null); // standards compliant
                    }
                    catch(ex)
                    {
                            currentSelect.add(newOption); // IE only
                    }
                    if(codes[index] == code) {
                            selectedIndex = index;
                    }
            }
            currentSelect.selectedIndex = selectedIndex;
    }
}

Ce code fonctionne dans Opera 9.x, IE 7 - mais pas IE 6 (je tester dans Opera parce que j'aime Opera Dragonfly - mais il a vraiment que de travailler dans IE 7 et 6).

Dans IE 6, le code ne remplit le menu déroulant, mais il fixe la valeur sélectionnée à la première valeur dans la liste déroulante, pas la valeur sélectionnée. La valeur sélectionnée est réglée sur la valeur appropriée dans les deux autres navigateurs mentionnés.

Je ne suis pas un gourou Javascript par tout moyen - donc si quelqu'un sait pourquoi IE 6 est en train de faire cela et comment la contourner, ce serait apprécié. Notez également que le commentaire il y a un commentaire JSP - il est extirpé avant que ce Javascript est envoyé au navigateur (ce n'est pas un commentaire invalide).

Créé 26/08/2009 à 23:06
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Je l'ai rencontré ce problème exact avant. Si vous essayez d'accéder à des éléments enfants dynamiquement créés d'un élément de sélection (options) avant de mise au point est rendu au document, la mise en selectedIndex échouera et par défaut le premier élément.

Je posterai quand je peux trouver l'article que je trouve la solution dans. Restez à l'écoute!

METTRE À JOUR:

Je l'ai trouvé!

Au lieu de fixer le selectedIndexsur l' <select>élément, trouver l' <option>élément que vous voulez et définissez son attribut « sélectionné » true:

var currentSelect = document.getElementById(id);
if(currentSelect.length == 1) {
        currentSelect.remove(0);
        var selectedIndex = 0;
        for(var index = 0; index < codes.length; index++) {
                var newOption = document.createElement('option');
                newOption.value = codes[index];
                newOption.text = values[index];
                try {
                        currentSelect.add(newOption, null); // standards compliant
                }
                catch(ex)
                {
                        currentSelect.add(newOption); // IE only
                }
                if(codes[index] == code) {
                        selectedIndex = index;
                }
        }
        // currentSelect.selectedIndex = selectedIndex;
        // Try this:
        currentSelect.options[selectedIndex].setAttribute('selected', true);
}
Créé 26/08/2009 à 23:13
source utilisateur

voix
0

Les commentaires de Cory m'a aidé, mais son code n'a pas produit les résultats que j'espérais sous IE 6. Toutefois, il a souligné que l'accent peut être le problème. L'extrait suivant permet de sélectionner correctement sous IE 6 - il semble vraiment bizarre, car il charge le menu déroulant, puis sélectionne, mais la fonctionnalité est ce que je veux et il est plus rapide que HTML statique pour charger.

currentSelect.focus();
currentSelect.selectedIndex = selectedIndex;

En se concentrant sur l'entrée, puis définir l'index sélectionné, fonctionne dans IE 6 - bien que le menu déroulant saute à la première entrée très rapide, puis revient en arrière. Mais, aussi longtemps que cela fonctionne ...

Créé 27/08/2009 à 15:34
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more