Як зробити перший параметр <select>, обраний за допомогою jQuery


546

Як зробити перший варіант обраного за допомогою jQuery?

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

Відповіді:


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

363
Слід зазначити, що це простіше зробити з $ ("# target") [0] .selectedIndex = 0;
Девід Андрес

17
Це працює, але воно базується на значенні 1-го елемента , якщо 1-й елемент містить порожнє значення, він вибере найближчий елемент З значенням
evilReiko

2
Здається, працює чудово, за винятком IE6.
Невірно

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

2
І це насправді необхідно для IE6, 7 та 8. В той час як .val ('варіант: перший') працює в 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, щоб видалити "вибраний" прапор із усіх параметрів, які, можливо, вже вибрані. Тепер відповідь правильна :)
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, в результаті чого елемент, який може не відновитись належним чином, у формі, в якій було викликано подію скидання.

Використовуйте метод підтримки jQuery, щоб очистити та встановити необхідний параметр:

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

3
Ідеально. У мене каскадні випадаючі меню. Коли користувач вибирає батьківський варіант 2, тоді дочірній варіант 3, я не хочу, щоб він "тримався". Іншими словами, потім користувач вибирає батьківський №1, потім повторно вибирає батьківський №2. Коли це станеться, я хочу, щоб дочірнє меню повернулося до першого варіанту (у моєму випадку це "Будь-який"). Усі інші рішення тут виходять з ладу на Firefox v19 та Chrome в Linux.
Lance Cleveland

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

1
Це не спрацює у випадках, коли у спадному списку є попередньо вибраний елемент. Дивіться мої коментарі до вибраної відповіді для деталей.
Ленс Клівленд

21

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

Зміна виклику .change () до кінця також оновить віджет інтерфейсу.

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

(Зверніть увагу, що я помітив це під час використання jQuery Mobile та вікна на робочому столі Chrome, тому це може бути не скрізь).


Зміна виклику .change () до кінця також оновить віджет інтерфейсу.
codemirror

17

Якщо у вас відключені параметри, ви можете додати не ([відключено]), щоб запобігти їх вибору, що призводить до наступного:

$("#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 не працює, якщо вже є вибраний атрибут. Код, який я зараз використовую, спочатку скасує вибраний атрибут, а потім вибере перший варіант.

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

Це добре працює і дуже схоже на відповідь Джеймса Лі Бейкера, відміченого в іншому місці на це питання. Мені подобається інша відповідь з опцією: вибрана та опція: спочатку як виконання параметра: перший, швидше за все, буде швидшим (обчислити), ніж 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
Це добре працює і дуже схоже на відповідь Джеймса Лі Бейкера, відміченого в іншому місці на це питання. Мені подобається інша відповідь з опцією: вибрана та опція: спочатку як виконання параметра: перший, швидше за все, буде швидшим (обчислити), ніж find ().
Ленс Клівленд

2

Для мене це працювало лише за допомогою тригера ('зміни') наприкінці, як це:

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

2

Якщо ви збираєтесь використовувати перший варіант, як типовий варіант

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

тоді ви можете просто використовувати:

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

Це приємно і просто.



1

На звороті відповіді Джеймса Лі Бейкера я вважаю за краще це рішення, оскільки воно знімає залежність від підтримки браузера для: по-перше: вибраного ...

$('#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()просто отримує значення першої опції у списку. Він фактично не вибирає (робить вибраним) перший варіант, як було задано в оригінальному запитанні.
Функа

1

Для мене це працювало лише тоді, коли я додав наступний рядок коду

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


0

Якщо ви зберігаєте jQuery об'єкт елемента вибору:

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.