2010-06-01 4 views
0

Я пытаюсь выяснить, как удалить параметры из окна выбора, когда эта опция была выбрана в смежном поле выбора. В основном пользователь имеет возможность добавлять несколько записей здесь с помощью полей выбора, но я хочу удалить список доступных им вариантов, чтобы, например, они не могли ввести одно и то же значение в два блока выбора.jQuery indexOf select box manipulation

Когда нажата кнопка Add More, я исчезаю в следующем контейнере контейнера. Ряд блоков выбора был сгенерирован PHP, и я использую JS, чтобы скрыть их. В каждом окне выбора есть уникальный номер, добавленный к идентификатору, поэтому я хочу получить доступ к этим ячейкам выбора, которые содержат строку «other_pet_types», затем я хочу выполнить итерацию по видимым в настоящее время и построить массив выбранных значений, который я затем удалю из списка параметров в только что появившемся поле выбора.

Это то, что у меня есть до сих пор, но это определенно не так - я не могу получить начальный тест на ID для работы.

Любые указатели очень ценятся, так как я понимаю, что я довольно широко отмечен на данный момент!

var vals = new Array(); 
//build array with currently selected options 
    $('p.mult_entries select').each(function(){ 
      vals += $(this).val(); 
    }); 
    $("p.mult_entries:hidden:first").fadeIn("slow", function() { 
      $(this).find(('select').attr('id').indexOf('other_pet_types') > 0).each(function(){ 
      console.log($(this).val()); //as expected prints nothing - need to iterate through the options of the above select 
       //once i extract the correct values, iterate through new select box and use inArray to remove options where that value already exists in one of previous select boxes 
     }); 
    }); 

ответ

1

Я сделал быстрый jsFiddle based on your description, который работает. Вместо создания отдельного массива он просто перебирает опции выбора. Вероятно, вы захотите добавить логику для изменения выбора и повторного включения своего предыдущего выбора. Вы можете использовать функцию jQuery .data(), чтобы сохранить значение, чтобы вы могли получить его после изменения .... или вы можете сохранить его в файл cookie. Это должно заставить вас начать.

+0

Спасибо за это Брэдли, очень аккуратный. У меня это почти работает, но Chrome бросает ошибку «неожиданный токен ILLEGAL» - я думаю, что это происходит из этой строки: $ (". Filter"). Not (this) .children(). Each (function() {. .... Любые идеи? – kenny99

+0

Хммм ... это интересно. Я не получаю эту ошибку на хроме. Хром говорит вам, что такое незаконный токен? Следует отметить, что если вы скопируете и вставьте из jsFiddle, вы можете завершить с дополнительными вопросительными знаками в своем коде ... не знаю, почему это так. –

+0

Ах, получил это - на самом деле не видел никаких дополнительных символов, но удалял все промежутки между кодом i, вставленным с jsFiddle, и тем, что у меня было до , должно быть, были некоторые нежелательные персонажи. Еще раз спасибо! – kenny99

1

То, как вы строите свой массив, неверно. Вы строите его как строку, а не массив. Это должно работать:

$('p.mult_entries select').each(function(){ 
    vals[vals.length] = $(this).val(); 
}); 

Путь вы найти соответствующие полей выбора могут быть включены в только селектор, а не ряд функций:

$(this).children("select[id^=other_pet_types]").each(function(){ 
    //do stuff here 
}); 
+0

Thanks Pickle, я почти сейчас. То, что я действительно хочу сделать, это что-то вроде этого, чтобы перебирать опции в каждом выборе - я пробовал следующее, но получаю сообщение об ошибке «непризнанное выражение: опция» $ (this) .children ("select [id^= other_pet_types] "). children (" option "). each (function() { if ($. inArray (vals, $ (this) .val())) $ (this) .remove(); }); – kenny99