Javascript удаляет ‹опцию› из раскрывающегося списка по идентификатору

Я работаю над приложением, которое динамически генерирует раскрывающийся список элементов. Сгенерированные идентификаторы варьируются от «1» до целого числа, которое вводит пользователь (0 зарезервировано для жестко запрограммированного «выбора опции»). Я хочу, чтобы javascript динамически удалял параметры, если пользователь передумал и ввел меньшее значение. Все до этого момента работает для сценария, но я не могу заставить его работать. Ниже приведен раздел, с которым у меня возникли трудности... между прочим, последний раздел, прежде чем я смогу создать более интересные части моей утилиты.

var itemSelect = document.getElementById("itemSelector");
var optionCount = itemSelect.childElementCount;

for (i = optionCount-1, n = arrayTotal.length; i < n; i++)
{
    var itemSelect = document.getElementById("itemSelector");
    var option = document.createElement("option");
    var optionCount = itemSelect.childElementCount;
    if (optionCount - 1 > totalItems)
    {
        for (j = optionCount, o = totalItems; o < j; j--)
        {
            var trash = document.getElementById("itemSelector");
            trash.removeChild(trash.childNodes[j]);
        }
    }
    else if (optionCount <= totalItems)
    {
        option.innerHTML = "<option> Item number"+(arrayTotal[i])+"</option>";
        option.value = arrayTotal[i];
        option.id = i;
        itemSelect.appendChild(option);
    }
}

Я создал несколько инструментов отладки для проверки определенных значений. arrayTotal[] правильно получает элементы из своей функции заполнения и динамически изменяет размер, как предполагалось. Он постоянно имеет то же значение, что и totalItems.

optionCount правильно заполняет раскрывающийся список максимальным значением, которое вводит пользователь, но раздел, который должен удалять дополнительные параметры, если пользователь вводит меньшее значение, ничего не делает. Я читал много подобных проблем и пробовал много разных методов, и я совершенно в растерянности. Есть ли что-то особенно неправильное в том, как я пытаюсь это реализовать?

Кроме того, есть ли очевидная причина, почему если я не объявлю две переменные, которые я делаю здесь, как вне цикла for, так и внутри, все сломается? Я все еще новичок в javascript, но это кажется довольно странным.

http://jsfiddle.net/CAlbano/s4mzssm1/ — это ссылка на работающую скрипку. Я включил все работы для всего сценария. Соответствующий раздел находится внизу, но таким образом вы можете видеть, что он делает. Три вывода, которые выполняются в элементе холста, — это значение последней ячейки arrayTotal[], значение totalItems и значение optionCount-1. что я хочу, так это то, что если optionCount когда-либо станет больше, чем totalItems, удалите последний дочерний элемент из этого списка до тех пор, пока optionCount == totalItems.

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


person Chris    schedule 02.08.2015    source источник


Ответы (1)


Условие цикла

...; i < n;...

с i = optionCount-1 и n = arrayTotal.length. Когда количество элементов массива меньше, вы никогда не переходите к телу цикла (где у вас есть скрипт removeChild.

person potatopeelings    schedule 02.08.2015
comment
Это предназначено. optionCount - 1 должно становиться меньше, чем arrayTotal.length, только если пользователь изменит его после первоначального ввода. Цель состоит в том, чтобы эта функциональность никогда не была нужна, но была надежно защищена от ошибок пользователя. - person Chris; 02.08.2015
comment
Не могли бы вы опубликовать свой код в скрипке - немного сложно догадаться, что происходит. Ваше здоровье! - person potatopeelings; 02.08.2015
comment
Я добавил скрипку. Ссылка в основном тексте. - person Chris; 02.08.2015