jQuery Set Выберите индекс


259

У меня есть поле выбора:

<select id="selectBox">
  <option value="0">Number 0</option>
  <option value="1">Number 1</option>
  <option value="2">Number 2</option>
  <option value="3">Number 3</option>
  <option value="4">Number 4</option>
  <option value="5">Number 5</option>
  <option value="6">Number 6</option>
  <option value="7">Number 7</option>
</select>

Я хотел бы установить один из параметров как «выбранный» на основе выбранного индекса.

Например, если я пытаюсь установить «Номер 3», я пытаюсь это:

$('#selectBox')[3].attr('selected', 'selected');

Но это не работает. Как я могу установить параметр, выбранный на основе его индекса с помощью jQuery?

Спасибо!


2
Это почти точно так же, как ваш предыдущий вопрос: stackoverflow.com/questions/1280369/…
Коби

Ответы:


452

ПРИМЕЧАНИЕ : ответ зависит от jQuery 1.6.1+

$('#selectBox :nth-child(4)').prop('selected', true); // To select via index
$('#selectBox option:eq(3)').prop('selected', true);  // To select via value

Спасибо за комментарий, .getне будет работать, так как он возвращает элемент DOM, а не элемент jQuery. Имейте в виду, что эту .eqфункцию можно использовать и вне селектора, если вы предпочитаете.

$('#selectBox option').eq(3).prop('selected', true);

Вы также можете быть более краткими / читабельными, если хотите использовать значение , вместо того, чтобы полагаться на выбор определенного индекса :

$("#selectBox").val("3");

Примечание: .val(3) в этом примере также работает, но нечисловые значения должны быть строками, поэтому я выбрал строку для согласованности.
(например, <option value="hello">Number3</option>требует от вас использовать .val("hello"))


7
+1 - у меня работал второй вариант. Выбранный ответ Джона Кугельмана не сработал для меня в IE7.
P.Brian.Mackey

2
К сожалению, ни один из этих способов не запускает для меня событие change (). У меня есть $ ('# selectBox'). Change (function () {alert ('Change')});
Майк Джонс

28
@mikejones - это дизайн. Когда вы программно устанавливаете выбранную опцию, вы можете не всегда хотеть инициировать событие изменения привязки (как в случае события загрузки страницы). Чтобы решить этот jquery, решение остается за разработчиком. В вашем случае вы можете просто вызвать $ ('# selectBox'). Change (); после того как вы вызвали $ ('# selectBox'). val ("3");
Маркус Папа

2
Первый вариант 0 или 1?
Ли Меадор

3
Я подумал, что стоит упомянуть, что post-jQuery 1.6.1, рекомендуемый метод для изменения логических свойств элемента, .prop()а не .attr().
DevlshOne

113

Это также может быть полезно, поэтому я решил добавить это сюда.

Если вы хотите выбрать значение, основанное на значении элемента, а не на индексе этого элемента, вы можете сделать следующее:

Ваш список выбора:

<select id="selectBox">
    <option value="A">Number 0</option>
    <option value="B">Number 1</option>
    <option value="C">Number 2</option>
    <option value="D">Number 3</option>
    <option value="E">Number 4</option>
    <option value="F">Number 5</option>
    <option value="G">Number 6</option>
    <option value="H">Number 7</option>
</select>

Jquery:

$('#selectBox option[value=C]').attr('selected', 'selected');

$('#selectBox option[value=C]').prop('selected', true);

Выбранный пункт теперь будет «Номер 2».


примечание: после $ () есть еще одно подчеркивание ... в противном случае это работает фантастически
Dusty J

1
+1 Я не мог заставить это работать точно, но из этого я наконец заставил его работать со следующим синтаксисом: $ ("# selectBox option [value = 'C']") [0] .selected = true;
Уес Грант

5
Просто имейте .attr('selected', 'selected')в виду, что не следует использовать несколько раз для одного выбора, так как некоторые браузеры могут запутаться (в некоторых случаях они начинают отмечать несколько элементов в домене как selected=selected". Если вам нужно изменить выбранное значение чаще (например, на кнопке) нажмите) используйте, .prop('selected', true)как предложено Марком. - Просто из-за этой проблемы было очень больно - и зря потратил время -
Том Финк

66

Попробуйте это вместо этого:

$("#selectBox").val(3);

2
Это также упрощает копирование с одного элемента на другой!
Сонни

опечатка: после "selectBox" вы пропускаете цитату
Niels Bom

1
Это просто и понятно. Я предпочитаю это решение.
Дэн Судебный пристав

Это работает в Chrome, но не работает для меня с IE9. Я использую: $ ('# selectBox option') [3] .selected = true; (Шонс отвечает).
cederlof

FWIW, это даже не работает в Chrome для меня. Использование ответа ": nth-child" сработало для меня.
Джей Тейлор

50

Еще проще:

$('#selectBox option')[3].selected = true;

1
Это сработало для меня, мне также нужно было выбрать по индексу, а не по значению.
Алан

1
Этот ответ дал мне то, что мне было нужно. Мне не хватало части «option» селектора при попытке выбора по имени $ (опция «select [name =" select_name »]) [index] .selected = true;
Смит Смит

16
# Set element with index
$("#select option:eq(2)").attr("selected", "selected");

# Set element by text
$("#select").val("option Text").attr("selected", "selected");

если вы хотите выбрать одним из лучших способов выбора набора, вы можете использовать
$('#select option').removeAttr('selected');для удаления предыдущих выборов .

# Set element by value
$("#select").val("2");

# Get selected text
$("#select").children("option:selected").text();  # use attr() for get attributes
$("#select option:selected").text(); # use attr() for get attributes 

# Get selected value
$("#select option:selected").val();
$("#select").children("option:selected").val();
$("#select option:selected").prevAll().size();
$("option:selected",this).val();

# Get selected index
$("#select option:selected").index();
$("#select option").index($("#select option:selected"));

# Select First Option
$("#select option:first");

# Select Last Item
$("#select option:last").remove();


# Replace item with new one
$("#select option:eq(1)").replaceWith("<option value='2'>new option</option>");

# Remove an item
$("#select option:eq(0)").remove();

+1 для: $ ('# выбор опции'). RemoveAttr ('выбранный'); Самый простой вариант, чтобы вернуть «выбранный» элемент в начало или без определенного выбора.
Майкл Троу

11

Важно понимать, что val()для selectэлемента возвращается значение выбранного параметра, а не номер элемента, как selectedIndexв javascript.

Для выбора опции value="7"вы можете просто использовать:

$('#selectBox').val(7); //this will select the option with value 7.

Для отмены выбора опции используйте пустой массив:

$('#selectBox').val([]); //this is the best way to deselect the options

И, конечно, вы можете выбрать несколько вариантов *:

$('#selectBox').val([1,4,7]); //will select options with values 1,4 and 7

* Однако, чтобы выбрать несколько параметров, ваш <select>элемент должен иметь MULTIPLEатрибут, иначе он не будет работать.


11

У меня всегда были проблемы с prop ('selected'), у меня всегда работало следующее:

//first remove the current value
$("#selectBox").children().removeAttr("selected");
$("#selectBox").children().eq(index).attr('selected', 'selected');

8

Попробуй это:

$('select#mySelect').prop('selectedIndex', optionIndex);

В конце концов, вызовите событие .change:

$('select#mySelect').prop('selectedIndex', optionIndex).change();

6

Надеюсь, что это может помочь слишком

$('#selectBox option[value="3"]').attr('selected', true);


4

NB:

$('#selectBox option')[3].attr('selected', 'selected') 

неверно, массив deference возвращает вам объект dom, а не объект jquery, поэтому он завершится с ошибкой TypeError, например, в FF с: "$ ('# selectBox option') [3] .attr () не является функцией «.


4

Чтобы уточнить ответы Марка и Джона Кугельмана, вы можете использовать:

$('#selectBox option').eq(3).attr('selected', 'selected')

get() не будет работать, если используется указанным способом, потому что он получает объект DOM, а не объект jQuery, поэтому следующее решение не будет работать:

$('#selectBox option').get(3).attr('selected', 'selected')

eq()получает фильтры jQuery, установленные для элемента с указанным индексом. Это понятнее, чем $($('#selectBox option').get(3)). Это не так уж и эффективно. $($('#selectBox option')[3])является более эффективным (см. контрольный пример ).

Вам на самом деле не нужен объект jQuery. Это сделает свое дело:

$('#selectBox option')[3].selected = true;

http://api.jquery.com/get/

http://api.jquery.com/eq/

Еще один жизненно важный момент:

Атрибут «выбранный» отличается от того, как указывается выбранный переключатель (по крайней мере, в Firefox и Chrome). Используйте проверенный атрибут:

$('#selectBox option')[3].checked = true;

То же самое касается флажков.


4

В 1.4.4 вы получаете ошибку: $ («опция # selectBox») [3] .attr не является функцией

Это работает: $('#name option:eq(idx)').attr('selected', true);

Где #nameнаходится id выбора и idxзначение опции, которую вы хотите выбрать.


4

Чистый javascript атрибут selectedIndex - правильный путь, потому что он чистый javascript и работает в кросс-браузерном режиме:

$('#selectBox')[0].selectedIndex=4;

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

<select onchange="$('#selectBox')[0].selectedIndex=this.selectedIndex">
  <option>0</option>
  <option>1</option>
  <option>2</option>
</select>

<select id="selectBox">
  <option value="0">Number 0</option>
  <option value="1">Number 1</option>
  <option value="2">Number 2</option>
</select>

Вы также можете вызвать это перед изменением selectedIndex, если вам нужен атрибут «selected» в теге option ( здесь - скрипка ):

$('#selectBox option').removeAttr('selected')
   .eq(this.selectedIndex).attr('selected','selected');

2
//funcion para seleccionar por el text del select
var text = '';
var canal = ($("#name_canal").val()).split(' ');
$('#id_empresa option').each(function(i, option) {
        text = $('#id_empresa option:eq('+i+')').text();
        if(text.toLowerCase() == canal[0].toLowerCase()){
            $('#id_empresa option:eq('+i+')').attr('selected', true);
        }
    });

2

Я часто использую триггер («изменение»), чтобы заставить его работать

$('#selectBox option:eq(position_index)').prop('selected', true).trigger('change');

Пример с идентификатором select = selectA1 и position_index = 0 (опция frist в select):

$('#selectA1 option:eq(0)').prop('selected', true).trigger('change');

1
$('#selectBox option').get(3).attr('selected', 'selected')

При использовании вышеизложенного я продолжал получать ошибки в webkit (Chrome), говоря:

"Uncaught TypeError: Object # не имеет метода attr"

Этот синтаксис останавливает эти ошибки.

$($('#selectBox  option').get(3)).attr('selected', 'selected');

1

Выберите элемент на основе значения в списке выбора (особенно, если значения параметров содержат пробел или странный символ), просто выполнив это:

$("#SelectList option").each(function () {
    if ($(this).val() == "1:00 PM")
        $(this).attr('selected', 'selected');
});

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


1

Мне нужно решение, которое не имеет жестко закодированных значений в файле js; используя selectedIndex. Большинство из приведенных решений подвело один браузер. Похоже, что это работает в FF10 и IE8 (может кто-то еще проверить в других версиях)

$("#selectBox").get(0).selectedIndex = 1; 

1

Если вы просто хотите выбрать элемент на основе определенного свойства элемента, то опция jQuery типа [prop = val] получит этот элемент. Теперь меня не волнует индекс, я просто хотел получить элемент по его значению.

$('#mySelect options[value=3]).attr('selected', 'selected');

1

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

Например:

Первое событие генерирует поле выбора с вариантами.

Второе событие выбирает опцию по умолчанию с помощью какой - либо функции , такие как вал () и т.д.

Вы должны убедиться, что Второе событие должно произойти после Первого события .

Чтобы достичь этого, возьмите две функции, скажем, generateSelectbox () (для генерирования выделенного блока) и selectDefaultOption ()

Вы должны убедиться, что selectDefaultOption () должен вызываться только после выполнения generateSelectbox ()


1

Вы также можете инициализировать несколько значений, если ваш selectbox имеет множитель:

$('#selectBox').val(['A', 'B', 'C']);

0

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

код:

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

      $(function(){
            $('#allcheck').click(function(){
             // $('#select_option').val([1,2,5]);also can use multi selectbox
              // $('#select_option').val(1);
               var selectoption=3;
           $("#selectBox>option[value="+selectoption+"]").attr('selected', 'selected');
    });

});

HTML-код:

   <select id="selectBox">
       <option value="0">Number 0</option>
       <option value="1">Number 1</option>
       <option value="2">Number 2</option>
       <option value="3">Number 3</option>
       <option value="4">Number 4</option>
       <option value="5">Number 5</option>
       <option value="6">Number 6</option>
       <option value="7">Number 7</option>
 </select> <br>
<strong>Select&nbsp;&nbsp; <a style="cursor:pointer;" id="allcheck">click for select option</a></strong>


-2

Коротко:

$("#selectBox").attr("selectedIndex",index)

где индекс - это выбранный индекс как целое число.


этот код работает $ ('# selectBox'). prop ({selectedIndex: wantedIndex})
jurijcz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.