Сортировка списка Javascript работает, если только в таблице IE8 - PullRequest
0 голосов
/ 23 марта 2010

У меня есть функция, которая, когда пользователь выбирает один или несколько элементов, перемещает эти элементы в верхнюю часть списка (все еще выбрано) и прокручивает вверх, чтобы они были видны. Он работает во всех основных браузерах, которые я тестировал. Проблема возникает, когда у меня есть эта функция сортировки списка внутри ячейки таблицы. Когда я делаю это и использую IE8, он правильно сортирует и подсвечивает, но не прокручивает вверх. JavaScript проходит базовую проверку JSLint, а веб-страница проходит проверку HTML. Я нашел причуду с IE8? Я неправильно кодирую функцию сортировки и прокрутки списка?

<script type="text/javascript">
function Arrange(obj) {
    var countSel = 0, countNSel = 0, i, arr_selected = [], arr_unselected = [];
    for (i = 0; i <= obj.length - 1; i++) {
        if (obj.options[i].selected) {
            //create array with all selected items then sort it
            arr_selected[countSel] = [];
            arr_selected[countSel][0] = obj.options[i].text;
            arr_selected[countSel][1] = obj.options[i].value;
            countSel = countSel + 1;
            arr_selected.sort();
        }
        else {
            //create array with all UNselected items then sort it
            arr_unselected[countNSel] = [];
            arr_unselected[countNSel][0] = obj.options[i].text;
            arr_unselected[countNSel][1] = obj.options[i].value;
            countNSel = countNSel + 1;
            arr_unselected.sort();
        }
    }
    if (countSel !== 0) {
        //overwrite listbox options with selected items
        for (i = 0; i <= countSel - 1; i++) {
            obj.options[i] = new Option(arr_selected[i][0], arr_selected[i][1]);
        }
        //overwrite listbox options with UNselected items
        for (i = 0; i <= countNSel - 1; i++) {
            obj.options[countSel] = new Option(arr_unselected[i][0], arr_unselected[i][1]);
            countSel = countSel + 1;
        }
    }

    //for showing selected items
    //scroll to the top of the list and select the appropriate items
    //it's in reverse order because IE8 wanted to only scroll to the last item selected
    obj.selectedIndex = 0;
    for (i = arr_selected.length - 1; i >= 0; i--) {
        obj.options[i].selected = true;
    }
}
</script>
</head>
<body>
<form name="frm" action="post">
<table><tr><td>test:</td><td>
<select size="4" name="cbostaffcontact" multiple onblur="Arrange(document.forms[0].cbostaffcontact);">
<option value="user1">Al</option>
<option value="user2">Bob</option>
<option value="user3">Christy</option>
<option value="user4">Jane</option>
<option value="user5">Randy</option>
<option value="user6">Tom</option>
<option value="user7">Zed</option>
</select>
</td></tr></table>
</form>

1 Ответ

0 голосов
/ 23 марта 2010

Это, вероятно, странность в IE8, но ваш код на самом деле ничего не говорит о прокрутке, поэтому я бы не стал винить IE8. Вот простая инструкция, которая должна решить вашу проблему :

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