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


548

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

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>

Ответы:


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

364
Следует отметить, что это легче сделать с помощью $ ("# target") [0] .selectedIndex = 0;
Дэвид Андрес

17
Это работает, но оно основано на значении 1-го элемента , если 1-й элемент содержит пустое значение, он выберет ближайший элемент со значением WITH
evilReiko

2
Вроде отлично работает, кроме IE6. Неуверенный в 7-8, работает на 9.
Никол

3
Я отрекаюсь от своего предыдущего заявления, забегал вперед. $ ( "# целевой") Вал ( "вариант: первый"). работает почти везде, но IE6 $ ("target"). val ($ ("# target option: first"). val ()); будет работать в IE6, потому что вы буквально ищите первое значение и вводите его как значение цели. Два поиска по идентификатору вместо одного.
Николи

2
И это на самом деле необходимо для IE6, 7 и 8. Принимая во внимание, что .val ('option: first') работает в IE9 (и в Safari, и в Firefox, и в Chrome, и в Opera).
Николи

178

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

$("#target").prop("selectedIndex", 0);

2
Это не работает должным образом во всех случаях. У меня есть родительский / дочерний каскадный выпадающий список. Выберите родителя № 1, отобразите дочернего № 1, выберите родителя № 2, отобразите дочернего № 2. Каждый раз, когда они выбирают нового родителя, он должен установить соответствующий дочерний элемент обратно в первую опцию. Это решение не делает этого. Он оставляет детское меню «липким». См. Вариант: selected.prop ('selected', false) / option: first.prop ('selected', 'selected') по этому вопросу для ответа, который работает в других сценариях.
Лэнс Кливленд

это не вызывает событие onChange. По крайней мере, в хроме.
Томаш Муларчик

Спасибо! Это первый ответ в списке ответов, который работал для меня.
Кейси Крукстон

6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan

@Romesh, как я могу установить selectedIndex базу на значение?
Младшая Лягушка

111
// 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 («выбранный», «выбранный»). Без этого дополнительного параметра выбор не будет сделан.
Дэвид Андрес

@EgorPavlikhin - я только что отредактировал ответ, включив код JQuery, чтобы убрать флаг «selected» из любых опций, которые, возможно, уже были выбраны. Теперь ответ правильный :)
jmort253

20
Нет необходимости в eachфункции, должно быть: $('#target option[selected="selected"]').removeAttr('selected')также теперь следует использовать с removePropи propвместо.
vsync

Более полная версия ответа Джеймса Ли Бейкера в другом месте на этот вопрос, хотя добавляет вычислительные циклы, которые могут не потребоваться, если интерфейс хорошо управляется.
Лэнс Кливленд

65

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

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

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

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

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

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


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

44

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

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

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");

3
Отлично. У меня есть каскадные выпадающие меню. Когда пользователь выбирает родительский вариант 2, то дочерний вариант 3, я не хочу, чтобы это «прилипало». Другими словами, пользователь затем выбирает родителя № 1, а затем повторно выбирает родителя № 2. Когда это происходит, я хочу, чтобы дочернее меню перезапустилось до первой опции (в моем случае это «Любой»). Все остальные решения здесь терпят неудачу на Firefox v19 и Chrome на Linux.
Лэнс Кливленд

33
$("#target")[0].selectedIndex = 0;

1
Это не будет работать в тех случаях, когда раскрывающийся список содержит предварительно выбранный элемент. Смотрите мои комментарии на выбранный ответ для деталей.
Лэнс Кливленд

21

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

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

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

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


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

17

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

$("#target option:not([disabled]):first").attr('selected','selected')

1
Хорошие замечания по поводу отключенных опций. Приятное дополнение к представленным ответам!
Лэнс Кливленд

16

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

$("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')
Ja͢ck


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

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

6

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

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

Это хорошо работает и очень похоже на ответ Джеймса Ли Бейкера, отмеченный в другом месте по этому вопросу. Мне нравится другой ответ с параметром option: selected и option: first при выполнении option: first, вероятно, будет быстрее (по вычислениям), чем find ().
Лэнс Кливленд

5

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

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

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


5

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

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

1
Это хорошо работает и очень похоже на ответ Джеймса Ли Бейкера, отмеченный в другом месте по этому вопросу. Мне нравится другой ответ с параметром option: selected и option: first при выполнении option: first, вероятно, будет быстрее (по вычислениям), чем find ().
Лэнс Кливленд

2

У меня сработало только использование триггера («изменение») в конце, например:

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

2

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

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

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

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

Это красиво и просто.



1

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

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

1

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

.change();

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

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


1

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

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

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


Как насчет позиции 15, 25 или с конкретным текстом? : D
Марсело Агимовель

Вызов .val()просто получает значение первой опции в списке. На самом деле он не выбирает (делает выбранным) первый вариант, как было задано в исходном вопросе.
Funka

1

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

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


0

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

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

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());

0

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

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

0

Вы можете выбрать любой вариант dropdown, используя его.

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 

0

$('select#id').val($('#id option')[index].value)

Замените идентификатор конкретным идентификатором тега, а индекс - конкретным элементом, который вы хотите выбрать.

т.е.

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

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

$('select#ddlState').val($('#ddlState option')[0].value)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.