Поменять местами опции в Internet Explorer? - PullRequest
1 голос
/ 01 января 2009

Мой клиент попросил меня (клиентского программиста JavaScript) изменить порядок параметров, чтобы при загрузке страницы параметр их компании отображался в верхней части поля выбора.

Следующий код работает в Firefox, но не работает в Internet Explorer 7, когда я пытаюсь поменять местами два параметра:

    function load{
        var shippingLocation  = document.getElementById("location");
        var swap = null;

        var initiallyFirstItem = shippingLocation.options[0].cloneNode(true);

        var lastPos = null;

        for(var i = 0; i < shippingLocation.length; i++)
        {
            if(shippingLocation.options[i].value == "XETEX")
            {
                swap = shippingLocation.options[i];
                lastPos = i;
                break;
            }
        }
        console.debug("sl: " + shippingLocation.options[0]);
        console.debug("s: " + swap);
        shippingLocation.options[0] = swap;
        shippingLocation.options[lastPos] = initiallyFirstItem;
        shippingLocation.selectedIndex = 0;
    }

Я получаю сообщение об ошибке рядом с третьей строкой снизу:

shippingLocation.options[0] = swap;

Ошибка гласит, что «объект не поддерживает это свойство или метод».

Что такое говядина в Internet Explorer с переключением элементов опций?

Ответы [ 2 ]

1 голос
/ 01 января 2009

Ну, я провел некоторое тестирование, и я считаю, что IE считает массив опций неизменным (в некотором смысле). Вы можете редактировать параметры и удалять их, но нельзя установить один параметр для другого.

Итак, когда вы делаете это:

  shippingLocation.options[0] = swap;

IE жалуется, потому что вы пытаетесь установить один параметр на другой.

Я бы сделал это вместо:

> Removed due to excessive stupidity on
> my part. :P

Вот лучший способ:

<script type="text/javascript">
function swap(obj,i,j) {
    sib=obj.options[i].nextSibling;
    obj.insertBefore(obj.options[i],obj.options[j]);
    obj.insertBefore(obj.options[j],sib);
}
</script>
1 голос
/ 01 января 2009

А вот и мы. Гораздо элегантнее, чем код выше.

function swapOptions(obj,i,j){
    var o = obj.options;
    var i_selected = o[i].selected;
    var j_selected = o[j].selected;
    var temp = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
        var temp2= new Option(o[j].text, o[j].value, o[j].defaultSelected, o[j].selected);
    o[i] = temp2;o[j] = temp;o[i].selected = j_selected;o[j].selected = i_selected;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...