Встановіть вибраний індекс спаду за допомогою jQuery


165

Як встановити індекс спаду в jQuery, якщо спосіб, який я знаходжу, такий:

$("*[id$='" + originalId + "']") 

Я роблю це таким чином, тому що я створюю елементи керування динамічно і оскільки ідентифікатори змінюються під час використання веб-форм, я знайшов це як обхід, щоб знайти мені деякі елементи управління. Але як тільки у мене є об’єкт jQuery, я не знаю, як встановити вибраний індекс на 0 (нуль).

Відповіді:


352

Перш за все - цей селектор досить повільний. Він буде сканувати кожен елемент DOM, шукаючи ідентифікатори. Показник продуктивності буде меншим, якщо ви зможете призначити елементу клас.

$(".myselect")

Щоб відповісти на ваше запитання, існує кілька способів змінити значення вибраних елементів у jQuery

// sets selected index of a select box to the option with the value "0"
$("select#elem").val('0'); 

// sets selected index of a select box to the option with the value ""
$("select#elem").val(''); 

// sets selected index to first item using the DOM
$("select#elem")[0].selectedIndex = 0;

// sets selected index to first item using jQuery (can work on multiple elements)
$("select#elem").prop('selectedIndex', 0);

чи є кращий спосіб це зробити? Я подумав, що він просканує весь DOM, шукаючи відповідність ідентифікатору, але, оскільки я новачок у jQuery, я зрозумів, давайте змусимо його працювати, а потім подивимось, чи є кращий спосіб зробити це. Будь-яка порада буде вдячна.
оз.

Так - якщо ви можете призначити клас елементу, який вам потрібно знайти, це був би набагато швидший вибір.
gnarf

@gnarf - це не ідентифікатори швидше?
KBN

#an-idшвидше, але *[id$=ends-with]набагато повільніше, саме те, що означає "призначити клас елементу"
gnarf

Як щодо того, якщо у мене є кілька ASP.net DropDownList з різним вибраним значенням індексу?
SearchForKnowledge

106

Щойно знайшов це, це працює для мене, і мені особисто легше читати.

Це встановить фактичний індекс так само, як і варіант відповіді номер 3 gnarf.

// sets selected index of a select box the actual index of 0 
$("select#elem").attr('selectedIndex', 0);

Це не працювало, але зараз ... див. Помилку: http://dev.jquery.com/ticket/1474

Додаток

Як рекомендується в коментарях, використовуйте:

$("select#elem").prop('selectedIndex', 0);


30
А щодо jQuery 1.6 ви повинні використовувати .prop('selectedIndex', 0);незалежно від того, .attr()працює він чи ні :)
gnarf

1
Правильно, насправді це може не працювати в 1.7. см що обслуговується відповідь: stackoverflow.com/questions/8010664 / ...
4imble

+1 для доповнення. Мій старий код був порушений через цю проблему
BiLaL

11

Я пишу цю відповідь у 2015 році, і чомусь (можливо, старіші версії jQuery) жодна з інших відповідей не працювала для мене. Я маю на увазі, вони змінюють вибраний індекс, але він фактично не відображається на фактичному спаді.

Ось ще один спосіб змінити індекс і насправді відобразити його у спадному меню:

$('#mydropdown').val('first').change();

1
Дякую за вашу відповідь. Лише ця відповідь
спрацює

Також у 2015 році я не маю жодних проблем із prop('selectedIndex', ...);тестуванням вибору (Chrome і Firefox).
Ламбарт

2
Для того, що це варто, слід зазначити, що ви робите тут інше, це викликає changeподію в спадному меню, що також може бути корисним виправленням / вирішенням для людей, які змінюють вибір за допомогою виклику prop('selectedIndex', ...), а не val(...). Можливо, проблема полягала в тому, що ви слухаєте якусь changeподію, а ТО що не працює для вас? Це правда, що просто зміна prop
завмерлості не спричинить

9

Я використовую

$('#elem').val('xyz');

вибрати елемент опції, який має значення = 'xyz'


9

Код JQuery:

$("#sel_status").prop('selectedIndex',1);

Jsp код:

Status:
<select name="sel_status"
    id="sel_status">
    <option value="1">-Status-</option>
    <option>ALL</option>
    <option>SENT</option>
    <option>RECEIVED</option>
    <option>DEACTIVE</option>
</select>

3

Ви хочете схопити значення першого параметра в елементі вибору.

$("*[id$='" + originalId + "']").val($("*[id$='" + originalId + "'] option:first").attr('value'));

3

Щоб вибрати 2-й варіант

$('#your-select-box-id :nth-child(2)').prop('selected', true);

Тут ми додаємо "тригер" ("зміни"), щоб зробити подію запущеною.

$('#your-select-box-id :nth-child(2)').prop('selected', true).trigger('change');

це набагато краща відповідь.
Бен Дехган


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.