IE 6 Javascript substituindo selecione questão suspensa

votos
0

Eu tenho o seguinte código - que é usado para carregar uma caixa suspensa quando o usuário clica em um menu suspenso com apenas a opção padrão carregado, porque este drop-down é bastante grande e IE não gosta muito disso. Aqui está o código:

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

Esse código funciona no Opera 9.x, IE 7 - mas não IE 6 (eu testar no Opera porque eu gosto Opera Dragonfly - mas realmente só tem que trabalhar no IE 7 e 6).

No IE 6, o código faz preencher o drop-down, mas define o valor selecionado para o primeiro valor na lista drop-down, e não o valor selecionado. O valor selecionado é definido para o valor adequado nos outros dois navegadores mencionados.

Eu não sou nenhum guru Javascript por qualquer meio - por isso, se alguém sabe por que o IE 6 está fazendo isso e como obter em torno dele, que seria apreciada. Observe também que o comentário não é um comentário JSP - que é retirado antes deste Javascript é enviado para o navegador (não é um comentário inválido).

Publicado 26/08/2009 em 23:06
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Eu executar para esse problema exato antes. Se você tentar acessar elementos filhos criados dinamicamente de um elemento select (opções) antes do foco é dado de volta para o documento, definindo selectedIndex irá falhar e será o padrão para o primeiro item.

Vou postar de volta quando eu posso encontrar o artigo que encontrei a correção. Fique ligado!

ATUALIZAR:

Encontrei!

Em vez de definir o selectedIndexsobre o <select>elemento, encontrar o <option>elemento que deseja e defina seu atributo 'selecionada' a verdade:

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);
}
Respondeu 26/08/2009 em 23:13
fonte usuário

votos
0

Os comentários de Cory me ajudou, mas seu código não produziu os resultados que eu estava esperando sob IE 6. No entanto, ele ressaltou que o foco pode ser o problema. O seguinte trecho torna selecionar corretamente sob IE 6 - parece realmente estranho, porque ele carrega o drop-down e, em seguida, seleciona-lo, mas a funcionalidade é o que eu quero e é mais rápido do que HTML estático para carregar.

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

Concentrando-se na entrada, em seguida, definir o índice selecionado, funciona no IE 6 - embora o menu suspenso salta para a primeira entrada muito rápido, e depois salta para trás. Mas, enquanto ele funciona ...

Respondeu 27/08/2009 em 15:34
fonte usuário

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