2012-05-05 6 views
2

Я пытаюсь настроить набор ящиков для быстрого фильтрации довольно больших наборов данных в используемые фрагменты. И я очень близко, но получаю полную противоположность тому решению, которое я хочу, независимо от того, использую ли я .not() селектор (или вынимаю его) или настраиваю вызов с использованием .attr = (или .attr! =).jquery: удалять опции выбора на основе массива атрибутов и другого выбора поля выбора

Вот скрипка, так что вы можете увидеть, что происходит:.

http://jsfiddle.net/yD5cG/3/ (игнорировать тот факт, что как только вы измените выбор верхнего уровня, в нижней части выберите поле не изменяет мне не нужно беспокоиться об этом).

Я протащил сайт и нашел много кода, который близок к тому, что мне нужно, но я думаю, что разбор массивов отбрасывает его? На данный момент я не могу сказать, слишком ли я усложняю вещи или чрезмерно упрощаю. (Это в основном попытка простого фильтра «много-ко-многим» с использованием JQuery).

Спасибо за что-либо, даже самая основная идея ...

+0

Все эти недопустимые атрибуты не нужны; см. ответ ниже. – iambriansreed

+1

Спасибо @iambriansreed! Это так просто и элегантно - подумать, все те недействительные атрибуты заняли у меня 4 часа (почти), чтобы выяснить! Единственная проблема заключается в моей первоначальной разметке, вы увидите, что одна из опций в selectbox2 также содержит два значения. Вот почему я создавал атрибуты; Я не думал, что смогу сделать это с помощью опционных значений. Пойдем посмотреть, могу ли я использовать ваш код в качестве трамплина, чтобы сделать эту работу. – dilettante

+0

Обновлено для работы с параметрами с * несколькими * значениями. Обновлен скрипт. Не забудьте проголосовать и принять. :) – iambriansreed

ответ

2

Доказательство: http://jsfiddle.net/iambriansreed/KBKEV/

var options = $('#selectbox2').html(); 
//store original options 
$("#selectbox1").change(function() { 
    var selected = this.value.split(','); 
    // get selected value and make it an array 
    $('#selectbox2').html(options); 
    // reset the box to the original options 
    $('#selectbox2 option').filter(function(){ 
     if(this.value.indexOf(',') == -1){ 
      // simple single values 
      return $.inArray(this.value, selected) == -1; 
     }else{ 
      // check each value 
      var values = this.value.split(','); 
      for(i in values){ 
       if($.inArray(values[i], selected) > -1) 
        return false;    
      } 
      return true; 
     } 
    }).remove();  
    // remove any options not in the array of selected values 
});​ 

рабочая скрипку и шаг за шагом объяснение. Еще один качественный ответ.

Смежные вопросы