IE 6 Javascript výměně zvolením problém rozevírací

hlasů
0

Mám následující kód - se používá k načtení pokles dolů, když uživatel klikne na rozbalovací pouze načtené výchozí možnost, protože tento pokles dolů je poměrně velká a IE není tak moc. Zde je kód:

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;
    }
}

Tento kód funguje v Opera 9.x, IE 7 - ale ne IE 6 (I test v Opeře, protože mám rád Opera Dragonfly - ale je to opravdu musí pracovat v IE 7 pouze a 6).

V IE 6, kód dělá naplnit rozbalovací, ale nastaví vybranou hodnotu na první hodnotu v rozevírací seznam, nikoli zvolená hodnota. Zvolená hodnota je nastavena na správnou hodnotu v dalších dvou prohlížečů uvedených.

Nejsem žádný Javascript guru jakýmikoliv prostředky - takže pokud někdo ví, proč IE 6 je dělá a jak se dostat kolem něj, že bych být ocenil. Také si všimněte, že komentář je JSP komentář - je vynechají před tímto Javascript je poslán do prohlížeče (to není neplatný komentář).

Položena 26/08/2009 v 23:06
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Jsem běžet na tento problém přesně předtím. Při pokusu o přístup k dynamicky vytvořené podřízené prvky vybranému prvku (opce) před zájmem je uveden zpět do dokumentu, nastavení selectedIndex se nezdaří a bude výchozí první položce.

Budu psát, když jsem se najít článek, který jsem našel oprava v. Zůstaňte s námi!

AKTUALIZACE:

Našel jsem to!

Namísto nastavením selectedIndexna <select>prvek, najít <option>prvek, který chcete a nastavit svou ‚Výběr‘ atribut na hodnotu 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);
}
Odpovězeno 26/08/2009 v 23:13
zdroj uživatelem

hlasů
0

Komentáře Cory je mi pomohl, ale jeho kód nepřinesla výsledky Doufal jsem v IE 6. Nicméně, on poukázal na to, že zaměření může být problém. Následující úryvek umožňuje vybrat správně pod IE 6 - vypadá to opravdu divné, protože to načte z rozbalovacího menu a pak vybere, ale funkčnost je to, co chci, a to je rychlejší než statické HTML načíst.

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

Se zaměřením na vstupu, pak nastavení vybraného indexu, pracuje v IE 6 - ačkoli rozevírací skočí na první vstup opravdu rychle, a pak se vrátí zpět. Ale tak dlouho, jak to funguje ...

Odpovězeno 27/08/2009 v 15:34
zdroj uživatelem

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