IE 6 Javascript, заменяющий проблему выпадающего списка - PullRequest
0 голосов
/ 27 августа 2009

У меня есть следующий код - он используется для загрузки раскрывающегося списка, когда пользователь щелкает раскрывающийся список только с загруженной опцией по умолчанию, поскольку этот раскрывающийся список довольно большой, и IE это не очень нравится. Вот код:

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

Этот код работает в Opera 9.x, IE 7, но не в IE 6 (я тестирую в Opera, потому что мне нравится Opera Dragonfly, но он действительно должен работать только в IE 7 и 6).

В IE 6 код заполняет раскрывающийся список, но он устанавливает выбранное значение первым значением в раскрывающемся списке, а не выбранным значением. Выбранному значению присваивается правильное значение в двух других упомянутых браузерах.

Я ни в коем случае не гуру Javascript - поэтому, если кто-то знает, почему IE 6 делает это и как его обойти, это будет оценено. Также обратите внимание, что в комментарии есть комментарий JSP - он удаляется перед отправкой этого Javascript в браузер (это не недействительный комментарий).

Ответы [ 2 ]

1 голос
/ 27 августа 2009

Я сталкивался с этой проблемой раньше. Если вы попытаетесь получить доступ к динамически создаваемым дочерним элементам элемента select (options) до того, как фокус вернется к документу, установка selectedIndex завершится неудачно и по умолчанию будет первым элементом.

Я отправлю ответ, когда смогу найти статью, в которой нашел исправление. Оставайтесь с нами!

UPDATE:

Нашел!

Вместо установки selectedIndex для элемента <select> найдите нужный элемент <option> и установите для его атрибута selected значение 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);
}
0 голосов
/ 27 августа 2009

Комментарии Кори помогли мне, но его код не дал результатов, на которые я надеялся в IE 6. Однако он указал, что проблема может быть в фокусе. Следующий фрагмент заставляет его правильно выбрать в IE 6 - это выглядит очень странно, потому что он загружает выпадающий список, а затем выбирает его, но мне нужна функциональность, и он загружается быстрее статического HTML.

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

Фокусировка на входе, затем установка выбранного индекса работает в IE 6 - хотя выпадающий список очень быстро переключается на первый вход, а затем возвращается назад. Но пока это работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...