Проверьте, выбран ли параметр с помощью jQuery, если не выбран по умолчанию

207

Используя jQuery, как проверить, есть ли выбранная опция в меню выбора, и, если нет, назначить одну из выбранных опций.

(Выбор генерируется с помощью лабиринта функций PHP в приложении, которое я только что унаследовал, так что это быстрое решение, пока я обдумываю их :)

meleyal
источник
1
api.jquery.com/selected-selector
Пауло Энрике

Ответы:

270

Хотя я не совсем уверен, чего именно вы хотите достичь, этот фрагмент кода сработал для меня.

<select id="mySelect" multiple="multiple">
  <option value="1">First</option>
  <option value="2">Second</option>
  <option value="3">Third</option>
  <option value="4">Fourth</option>
</select>

<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length) {
    $("#mySelect option[value='3']").attr('selected', 'selected');
  }
});
</script>
Joe Lencioni
источник
86
Выбор будет легче читать следующим образом:$("#mySelect").val(3);
Jørn Schou-Rode
6
Это привело меня на правильный путь, но мне нужно было сделать следующее: $("#mySelect option")[2]['selected'] = true; понял это после исследования структур объектов в Firebug.
Семперос
28
Начиная с jQuery 1.6 вы можете установить свойство напрямую. $("#mySelect").prop("selectedIndex", 2)
gradbot
1
Версия .val (x) не работает в Internet Explorer 8, поэтому @gradbot имеет это право, так как это работает во всех браузерах.
Сорси
30

Для этого не нужно использовать jQuery:

var foo = document.getElementById('yourSelect');
if (foo)
{
   if (foo.selectedIndex != null)
   {
       foo.selectedIndex = 0;
   } 
}
FlySwat
источник
58
Оператор заявил: «Используя jQuery ...», так что, кажется, излишне игнорировать это, нет?
BryanH
13
Лично, если я задам конкретный вопрос, я бы хотел получить ответ на вопрос, а не другим способом.
Витто
18
Иногда ответ, который вы ищете, не тот, который вы ожидаете.
MrBoJangles
5
Несмотря на это, он попросил jQuery, и ответ jQuery немного легче понять, особенно если человек не понимает базовый JavaScript.
shmeeps
6
Отличный способ сделать это, иногда базовый javascript может быть очень удобным!
Hallaghan
13

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

Чтобы проверить, есть ли у выбранного элемента какие-либо выбранные элементы:

if ($('#mySelect option:selected').length > 0) { alert('has a selected item'); }

или чтобы проверить, есть ли у выбора ничего не выбрано:

if ($('#mySelect option:selected').length == 0) { alert('nothing selected'); }

или если вы в каком-то цикле и хотите проверить, выбран ли текущий элемент:

$('#mySelect option').each(function() {
    if ($(this).is(':selected')) { .. }
});

проверить, не выбран ли элемент в цикле:

$('#mySelect option').each(function() {
    if ($(this).not(':selected')) { .. }
});

Вот некоторые из способов сделать это. У jQuery есть много разных способов выполнить одно и то же, поэтому вы обычно просто выбираете, какой из них кажется наиболее эффективным.

Gavin
источник
«not» не сработало для меня $ ('# mySelect option'). each (function () {if ($ (this) .not (': selected')) {..}}); Таким образом, используется отрицание, например if (! $ (This) .is (': selected')) {..} Browser: Chrome; Версия Jquery: 3.1.1
Анил Кумар
12

Ленсиони ответит то, что я бы порекомендовал. Вы можете изменить селектор для опции, ('#mySelect option:last')чтобы выбрать опцию с определенным значением, используя " #mySelect option[value='yourDefaultValue']". Подробнее о селекторах .

Если вы интенсивно работаете со списками выбора на клиенте, проверьте этот плагин: http://www.texotela.co.uk/code/jquery/select/ . Посмотрите на источник, если вы хотите увидеть еще несколько примеров работы со списками выбора.

Алекс Пендлтон
источник
9

Вот моя функция, изменяющая выбранную опцию. Работает на jQuery 1.3.2

function selectOption(select_id, option_val) {
    $('#'+select_id+' option:selected').removeAttr('selected');
    $('#'+select_id+' option[value='+option_val+']').attr('selected','selected');   
}
шата
источник
7
<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length)
   $("#mySelect").val( 3 );

});
</script>
Рам Прасад
источник
3

Легко! По умолчанию должен быть первый вариант. Готово! Это привело бы вас к ненавязчивому JavaScript, потому что JavaScript не нужен :)

Ненавязчивый JavaScript

Мартин Лабущин
источник
3

Я уже сталкивался с упомянутым плагином texotela , который позволил мне решить его следующим образом:

$(document).ready(function(){
    if ( $("#context").selectedValues() == false) {
    $("#context").selectOptions("71");
    }
});
meleyal
источник
2

Посмотрите на SelectedIndex из selectэлемента. Кстати, это простая вещь DOM, а не специфичная для JQuery.

Хэнк Гей
источник
2

Это был быстрый скрипт, который я обнаружил, который сработал ... Результат присваивается метке.

$(".Result").html($("option:selected").text());
Joel
источник
1

Вы, ребята, делаете слишком много для выбора. Просто выберите по значению:

$("#mySelect").val( 3 );
giagejoe
источник
2
Это выбирает вариант 3 независимо от того, выбран ли другой вариант.
Джордан Райан Мур
1
if (!$("#select").find("option:selected").length){
  //
}
Авинаш Сайни
источник
1

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

    if(!$('#some_select option[selected="selected"]').val()) {
        //here code if it HAS NOT selected value
        //for exaple adding the first value as "placeholder"
        $('#some_select option:first-child').before('<option disabled selected>Wybierz:</option>');
    }

Если у #some_select не выбрана опция по умолчанию, то .val () не определена

Марчин Бон
источник
0
$("option[value*='2']").attr('selected', 'selected');
// 2 for example, add * for every option
user420944
источник
0
$("#select_box_id").children()[1].selected

Это еще один способ проверить, выбран вариант или нет в jquery. Это вернет Boolean (True или False).

[1] является индексом опции выбора поля

Таймур Чангайз
источник
0

Измените событие на поле выбора, чтобы оно сработало, и как только это произойдет, просто потяните атрибут id выбранной опции: -

$("#type").change(function(){
  var id = $(this).find("option:selected").attr("id");

  switch (id){
    case "trade_buy_max":
      // do something here
      break;
  }
});
Акаш Дип Сингхал
источник
0

Я просто искал что-то подобное и нашел это:

$('.mySelect:not(:has(option[selected])) option[value="2"]').attr('selected', true);

Это находит все меню выбора в классе, у которых еще не выбран вариант, и выбирает параметр по умолчанию (в данном случае «2»).

Я попытался использовать :selectedвместо [selected], но это не сработало, потому что что-то всегда выбирается, даже если ничто не имеет атрибута

Стивен Шох
источник
0

Если вам нужно явно проверить каждую опцию, чтобы увидеть, есть ли у какой-либо атрибут «выбранный», вы можете сделать это. В противном случае option:selectedвы получите значение для первой опции по умолчанию.

var viewport_selected = false;      
$('#viewport option').each(function() {
    if ($(this).attr("selected") == "selected") {
        viewport_selected = true;
    }
});
Земан
источник