jquery selectbox удаляет все параметры, кроме двух (имя переменной селектора)

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть следующее поле выбора

 <select name="loc_id_1" id="loc_id_1">
<option value="PLS" selected="selected">-- PLEASE SELECT --</option>
<option value="NEW">-- ADD NEW --</option>
<option value="1">Smith Company</option>
<option value="6">Jones Company</option>
<option value="23">Wright Company</option>
</select>
 

На странице loc_id_2, loc_id_3 и т. Д. Их Несколько, Все с разной информацией. Я использую следующее, чтобы обнаружить изменение в любом из них.

 $("[id^=loc_id_]").change(function(){
/// my magic code
var lc_id = $(this).attr('id');
my_function(lc_id,data1,data2);
});
 

Эта часть отлично работает. Проблема, с которой я сталкиваюсь, заключается в том, что в рамках этого кода я вызываю функцию, которая может обновлять данные в измененном поле выбора. поэтому я использую функцию удаления jquery для обновления поля выбора

 function my_function(id,d,f) {
var sel = $("#"   id);
sel.find('option[value!="NEW"] option[value!="PLS"]').remove();

// ajax code that calls database to append the other entries to the selectbox
}
 

Проблема в том, что это удаляет опцию «ДОБАВИТЬ НОВЫЙ», но оставляет «ПОЖАЛУЙСТА, ВЫБЕРИТЕ», но мои параметры из базы данных добавляются просто отлично.

Есть идеи, как это исправить…

Комментарии:

1. Несколько ошибок })); , myfunction my_function

2. Шаунак, я не копировал и не вставлял свой точный код, просто набирал идею, стоящую за ним. Но спасибо, что указали.

Ответ №1:

Ваш селектор будет искать descendant внутри элемента option, который имеет value NEW.Try,

 sel.find('option[value!="NEW"][value!="PLS"]').remove();
 

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это удаляет все значения до того, как мой ajax повторно добавит компании.

2. После обнаружения ошибки в моем HTML-коде это решение работает. Большое спасибо. Я также недатировал jsfiddle: jsfiddle.net/e6EB3/4

3. Спасибо Раджапрабху Аравиндасаму, это было полезно для меня.

4. Просто хотел сказать спасибо! Я не знал, как это будет сделано, и это действительно спасло меня! 🙂

Ответ №2:

Вы можете просто использовать :gt селектор

 sel.find('option:gt(1)').remove();
 

Рабочая демонстрация

Комментарии:

1. gt() всегда требуется индекс .. op пытается удалить element с помощью value .

2. @Girish: как вы можете ясно видеть, задача может быть достигнута просто с помощью изменения селектора. тогда зачем усложнять это??

3. хорошо, но в случае, если он хочет удалить значение 2 value="6" value="1" и у него нет индекса значений, тогда gt() функция будет работать?

4. @Girish: не будь мамой. он этого не хочет. тогда я бы не предоставил упрощенное решение.

5. Я успешно использовал селектор:gt при первом вызове, но дополнительные вызовы процедуры (т. Е. Я выбираю другой вариант) приводили к удалению параметров, которые я хотел сохранить. Догадываюсь, потому что я добавляю данные в поле выбора.