2009-11-29 2 views
18
<select id="sel"> 
<option value="123" selected="selected">text1</option> 
<option value="44">text2</option> 
<option value="882">text3</option> 
... 
</select> 

Как получить индекс выбранной опции с помощью jQuery? Может быть .index(subject), но все возможности проверены, не работают ...Как получить индекс метки select->

P.S. Индексы: Значение = "123" => 0, значение = "44" => 1, ...

Thanx

ответ

3

Это будет сделать это:

$("#sel").attr("selectedIndex") 
+2

Это путает разницу между attr и prop. Обратите внимание, что как только вы измените выбранный элемент в раскрывающемся списке в этом примере, selectedIndex не изменится и неверен: http://jsfiddle.net/b9chris/wxeVN/ –

+3

Это неправильно. 'attr (" selectedIndex ")' ничего не делает, вам нужно 'prop (" selectedIndex ")'. Демо: http://jsfiddle.net/Nj85e/ –

+7

Обратите внимание, что мой ответ был написан в 2009 году - и в то время, когда он ** был правильным. jQuery претерпел изменения с тех пор. –

2

Вы действительно можете сделать это без JQuery: var sel = document.getElementById('sel'); var index = sel.selectedIndex;

5
$("#sel").attr("selectedIndex") 

или

+1

Это неверно. 'attr (" selectedIndex ")' ничего не делает, вам нужно 'prop (" selectedIndex ")'. Демо: http://jsfiddle.net/Nj85e/ –

2

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

$('#sel option:selected').prevAll().length; 
+1

Это похоже на раунд о способе получения выбранного индекса, какова стоимость prevAll? – Bob

+1

Вы правы, в этом случае лучше проверить, что выбраноIndex. prevAll(), однако, должен быть быстрее, чем заниматься с помощью собственного метода .index(), который был исходным решением OP (если не используется jQuery 1.3.3) –

17

только второй ответ Боба является правильным:

$("#sel")[0].selectedIndex 

работы : http://jsfiddle.net/b9chris/wxeVN/1/

Использование .attr() работает только в том случае, если пользователь (или восстановление DOM браузера) не изменил е опция выбрана, так как страницы загружаются: http://jsfiddle.net/b9chris/wxeVN/

Вы могли бы реализовать это как расширение JQuery, и получить немного больше информации в процессе:

(function($) { 
    $.fn.selectedOption = function() { 
     var sel = this[0]; 
     return sel.options[sel.selectedIndex]; 
    }; 
})(jQuery) 

$('button').click(function() { 
    $('#output').text('selected index: ' + $('select').selectedOption().index); 
}); 

http://jsfiddle.net/b9chris/wxeVN/102/

Что возвращаемый .selectedOption() является фактический тег опции, так что вы можете получить доступ к .index, .value и .text - немного более удобно, чем просто индекс в типичном использовании.

10

Как я пишу это, два верхних ответа (включая принятый ответ) являются неправильными, несмотря на то, что они указаны почти пять лет назад. attr("selectedIndex") ничего не делает, потому что selectedIndex - это свойство на фактическом элементе DOM, а не на атрибут HTML. Вы должны использовать prop:

$(this).prop('selectedIndex') 

Interactive демонстрационную сравнивая это с неправильной версии: http://jsfiddle.net/uvwkD/

+2

Это единственное решение на этой странице, которое действительно работает ... –

1

Используйте стандартный индекс функции JQuery, как в этом примере кода

$("#sel option:selected").index()

+0

i нашел это наиболее полезным. Esp, когда multiple = true. – wallop

0

Указанное в заголовке не совсем соответствует вопросу ...

Как получить индекс select-> дополнительный тег

option.index // javascript 

$(option).prop('index') // jquery 

индекс выбран select-> Дополнительный тег:

document.getElementById('sel').selectedIndex // javascript 
Смежные вопросы