Отфильтровать результаты раскрывающегося списка по предыдущему выбору раскрывающегося списка с помощью jquery

Я успешно использовал скрипт jquery TheSuperTramp, размещенный здесь:

Раскрывающиеся поля, зависящие от Jquery, заполняются - как

чтобы удалить все элементы списка со значением меньше выбранного. Однако мне нужно удалить только то значение, которое я выбрал в первом раскрывающемся меню. Я считаю, что следующий скрипт jquery должен выполнить это, однако это не так. Буду очень признателен за любые предложения по исправлению этого.

Спасибо, КС

var drop2 = $("select[id=dropdown] option"); // the collection of initial options
$("select[id=test]").change(function () {
    var drop1selected = parseInt(this.value); //get drop1 's selected value
    $("select[id=dropdown]")
                     .html(drop2) //reset dropdown list
                     .find('option').filter(function () {
                         if (parseInt(this.value) == drop1selected)
                         {
                             $(this).remove();
                         };
                     });
});

person gemini6609    schedule 17.02.2014    source источник


Ответы (1)


На самом деле вам нужно здесь .each() вместо .filter():

var drop2 = $("select[id=dropdown] option"); // the collection of initial options
$("select[id=test]").change(function () {
    var drop1selected = parseInt(this.value); //get drop1 's selected value
    $("select[id=dropdown]")
                     .html(drop2) //reset dropdown list
                     .find('option').each(function () {
                         if (parseInt(this.value) === drop1selected)
                         {
                             $(this).remove();
                         };
                     });
});

Поскольку .filter() удалит элемент из результирующего набора соответствующих элементов, но не удалит их из DOM. Вы можете использовать его следующим образом:

var drop2 = $("select[id=dropdown] option"); // the collection of initial options
$("select[id=test]").change(function () {
    var drop1selected = parseInt(this.value); //get drop1 's selected value
    $("select[id=dropdown]")
                     .html(drop2) //reset dropdown list
                     .find('option').filter(function () {
                         return parseInt(this.value) === drop1selected;
                     }).remove();
});
person Siyu Song    schedule 17.02.2014
comment
Спасибо за ваш ответ. Я считаю, что ваша модификация должна была сработать, однако я решил, что из-за дизайна моей страницы эта функция не соответствует моим потребностям. Вместо этого я использовал функцию Json, которая обновляла значения из запроса в моем коде .net. - person gemini6609; 21.02.2014