Как сделать первый вариант <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);
Esben
источник
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');
user149513
источник
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;
danactive
источник
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

Просто так:

$('#target option:first').prop('selected', true);
Рамон Шмидт
источник
1
это намного лучше
Арун Прасад ES
7
$('#newType option:first').prop('selected', true);
FFFFFF
источник
Это работает, только если нет уже выбранных опций. Смотрите ответ Джеймса Ли Бейкера.
Вебар
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('');

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

Гэри - ITB
источник
2

Это сработало для меня!

$("#target").prop("selectedIndex", 0);
Арчана Камат
источник
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
$("#target").val(null);

нормально работал в хроме

Кришна Мурти
источник
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()); 
});
jdnichollsc
источник
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)
Хитеш Калвани
источник
-1

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

alert($( "#target option:first" ).text());
GobsYats
источник