Как сделать первый вариант <select> выбранным с помощью jQuery

428

Как сделать первый вариант с помощью jQuery?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>
Теги:
select

23 ответа

706
Лучший ответ
$("#target").val($("#target option:first").val());
  • 329
    Следует отметить, что это легче сделать с помощью $ ("# target") [0] .selectedIndex = 0;
  • 14
    Это работает, но оно основано на значении 1-го элемента, если 1-й элемент содержит пустое значение, он выберет ближайший элемент со значением
Показать ещё 10 комментариев
97
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');
  • 1
    Хороший второй подход. Пожалуйста, добавьте значение выбранного атрибута. Например, attr («выбранный», «выбранный»). Без этого дополнительного параметра выбор не будет сделан.
  • 0
    да, вы правы .. я забыл добавить это значение ..
Показать ещё 4 комментария
96

Вы можете попробовать это

$("#target").prop("selectedIndex", 0);
  • 14
    Надеюсь, этот ответ получит больше внимания.
  • 2
    Это не работает должным образом во всех случаях. У меня есть родительский / дочерний каскадный выпадающий список. Выберите родителя № 1, отобразите дочернего № 1, выберите родителя № 2, отобразите дочернего № 2. Каждый раз, когда они выбирают нового родителя, он должен установить соответствующий дочерний элемент обратно на первый вариант. Это решение не делает этого. Это оставляет детское меню «липким». См. Вариант: selected.prop ('selected', false) / option: first.prop ('selected', 'selected') решение по этому вопросу для ответа, который работает в большем количестве сценариев.
Показать ещё 7 комментариев
58

Когда вы используете

$("#target").val($("#target option:first").val());

это не будет работать в Chrome и Safari, если первое значение параметра равно null.

Я предпочитаю

$("#target option:first").attr('selected','selected');

поскольку он может работать во всех браузерах.

  • 3
    Вам также необходимо отменить выбор любых ранее выбранных элементов, чтобы это работало в большинстве случаев. Смотрите ответ от Джеймса Ли Бейкера для деталей.
  • 1
    неправильно работает с Firefox 53.0
37

Изменение значения входа выбора или настройка выбранного атрибута может переписать свойство selectedOptions по умолчанию для элемента DOM, в результате чего элемент, который не может reset правильно в форме, которая вызвала событие reset.

Использовать метод поддержки jQuery для очистки и установки необходимого параметра:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");
  • 3
    Отлично. У меня есть каскадные выпадающие меню. Когда пользователь выбирает родительский вариант 2, то дочерний вариант 3, я не хочу, чтобы это «прилипало». Другими словами, пользователь затем выбирает родителя № 1, а затем повторно выбирает родителя № 2. Когда это произойдет, я хочу, чтобы дочернее меню перезапустилось до первой опции (в моем случае «Любой»). Все остальные решения здесь терпят неудачу в Firefox v19 и Chrome в Linux.
31
$("#target")[0].selectedIndex = 0;
  • 1
    Это не будет работать в тех случаях, когда раскрывающийся список содержит предварительно выбранный элемент. Смотрите мои комментарии по выбранному ответу для деталей.
16

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

Цепочка вызова .change() до конца также обновит виджет пользовательского интерфейса.

$("#target").val($("#target option:first").val()).change();

(Обратите внимание, что я заметил это при использовании jQuery Mobile и окна на рабочем столе Chrome, так что это может быть не везде).

  • 0
    Цепочка вызова .change () до конца также обновит виджет пользовательского интерфейса.
15

Если вы отключили опции, вы можете добавить не ([отключено]), чтобы предотвратить их выбор, что приводит к следующему:

$("#target option:not([disabled]):first").attr('selected','selected')
  • 1
    Хороший вопрос об отключенных параметрах. Приятное дополнение к представленным ответам!
11

Другим способом для reset значений (для нескольких выбранных элементов) может быть следующее:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});
  • 4
    +1 на самом деле это хороший ответ, но вы могли бы сделать его более конкретным для предметной области; вместо $("selector") вы могли бы просто написать $('#target')
  • 0
    Это то, что мне нужно, так как у меня есть несколько вариантов выбора, спасибо :)
7

Простой:

$('#target option:first').prop('selected', true);
  • 1
    это намного лучше
7

$('#newType option:first').prop('selected', true)

  • 0
    Это работает, только если нет уже выбранных опций. Смотрите ответ Джеймса Ли Бейкера.
7

Я обнаружил, что только настройка attr не работает, если уже есть выбранный атрибут. Используемый мной код сначала отключит выбранный атрибут, затем выберите первый вариант.

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');
  • 0
    Это хорошо работает и очень похоже на ответ Джеймса Ли Бейкера, отмеченный в другом месте по этому вопросу. Мне нравится другой ответ с параметром option: selected и option: first при выполнении option: first, вероятно, будет быстрее (по вычислениям), чем find ().
5

Вот как я это сделаю:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');
  • 0
    Отлично работает в цикле $ .each, спасибо!
  • 1
    Это хорошо работает и очень похоже на ответ Джеймса Ли Бейкера, отмеченный в другом месте по этому вопросу. Мне нравится другой ответ с параметром option: selected и option: first при выполнении option: first, вероятно, будет быстрее (по вычислениям), чем find ().
4

Хотя каждая функция, вероятно, не нужна...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

работает для меня.

2

Использование:

$("#selectbox option:first").val()

Пожалуйста, найдите простой в этот JSFiddle.

  • 0
    Как насчет позиции 15, 25 или с конкретным текстом? : D
2

Если вы собираетесь использовать первый вариант по умолчанию, например

<select>
    <option value="">Please select an option below</option>
    ...

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

$('select').val('');

Это хорошо и просто.

  • 2
    Это не будет работать в IE.
1

Для меня это работало только тогда, когда я добавил следующий код:

.change();

Для меня это работало только тогда, когда я добавил следующий код: Поскольку я хотел "reset" форму, то есть выбрать все первые варианты всех выбранных форм, я использовал следующий код:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });

1

Он работал только для меня, используя триггер ('change') в конце, например:

$("#target option:first").attr('selected','selected').trigger('change');
1

На обратной стороне ответа Джеймса Ли Бейкера я предпочитаю это решение, поскольку оно устраняет зависимость от поддержки браузера: first: selected...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');
0

Проверьте этот лучший подход, используя jQuery с ECMAScript 6:

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});
0

Использование:

alert($( "#target option:first" ).text());
0

Если вы сохраняете объект jQuery элемента select:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());
0
$("#target").val(null);

работал отлично в хроме

Ещё вопросы

Сообщество Overcoder
Наверх
Меню