JQuery выбрать параметры ввода, кроме одного - PullRequest
6 голосов
/ 02 мая 2011

У меня есть мультивыбор, который содержит много источников, откуда посетитель пришел. Я также включаю опцию (со значением «all») в начало всех опций.

Когда кто-то щелкает по этой опции, будут выбраны все опции. И эта часть проста. Я включил multi-select и jquery, который прослушивает событие click.

<select name="sourceid[]" id="sourceid" style="width:230px;" multiple="multiple">
  <option value="all">-- Select All Sources --</option>
  <option value="1">Internet</option>
  <option value="2">Radio</option>
  <option value="3">Phone</option>
  <option value="4">Other</option>
</select>


$("#sourceid").click(function(){

  if($(this).val()=='all'){ $("#sourceid option").attr("selected","selected"); }

});

Пока все отлично работает! Естественно, jquery также выберет верхнюю опцию.

Есть ли способ сообщить jquery об исключении выбора этого варианта?

Ответы [ 7 ]

9 голосов
/ 02 мая 2011

Используйте этот селектор

$("option[value!=all]")

Все опции, где значение атрибута не равно all, пример для jsFiddle

Атрибут не равен селектору jQuery API

3 голосов
/ 02 мая 2011

Попробуйте, используя jQuery's not () селектор

$("#sourceid").click(function(){

  if($(this).val()=='all'){ 
            $("#sourceid option").not(this)
                   .attr("selected","selected"); 
  }

});
2 голосов
/ 02 мая 2011

Как насчет

$("#sourceid option").not(':first').attr("selected","selected");
0 голосов
/ 02 мая 2011
$("#sourceid option[value=all]").click(function(){
    $(this).siblings().attr("selected","selected");
});

может быть, лучше:

$("#sourceid option[value=all]").click(function(){
if($(this).siblings("[selected=selected]").size() == $(this).siblings().size()) {
    $(this).siblings().removeAttr("selected");
} else {
    $(this).siblings().attr("selected","selected");
}
});
0 голосов
/ 02 мая 2011

Вы можете использовать не Slector, как это:

 $("#sourceid :not(option[value='all'])").attr("selected", "selected");
0 голосов
/ 02 мая 2011

Избегайте проблемы;просто добавьте disabled в верхнюю опцию.В любом случае, вы не хотите, чтобы они могли отправить эту опцию.

<select name="sourceid[]" id="sourceid" style="width:230px;" multiple="multiple">
  <option value="all" disabled>-- Select All Sources --</option>
  <option value="1">Internet</option>
  <option value="2">Radio</option>
  <option value="3">Phone</option>
  <option value="4">Other</option>
</select>
0 голосов
/ 02 мая 2011

Если я правильно понимаю, что вы пытаетесь сделать, я бы вместо этого использовал список флажков, а затем имел бы флажок select all, который проверяет все поля вместо использования выпадающего списка ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...