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

Cómo obtener el índice de la opción seleccionada con jQuery? Puede ser .index(subject), pero todas las posibilidades probadas, no funcionó ...cómo obtener el Índice de Seleccionar-> etiqueta de opción

P.S. Índices: value = "123" => 0, value = "44" => 1, ...

Gracias

Respuesta

3

Esta voluntad hacerlo:

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

Esto confunde la diferencia entre attr y prop. Tenga en cuenta que una vez que cambia el elemento seleccionado en el menú desplegable en este ejemplo, selectedIndex no cambia y es incorrecto: http://jsfiddle.net/b9chris/wxeVN/ –

+3

Esto está mal. 'attr (" selectedIndex ")' no hace nada, necesita 'prop (" selectedIndex ")'. Demostración: http://jsfiddle.net/Nj85e/ –

+7

Nota: mi respuesta fue escrita en 2009, y en el momento en que ** era ** correcta. jQuery ha sufrido cambios desde entonces ... –

2

En realidad puede hacerlo sin jQuery: var sel = document.getElementById('sel'); var index = sel.selectedIndex;

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

o

$("#sel")[0] //to get the DOM element 
$("#sel")[0].selectedIndex 
+1

Esto está mal. 'attr (" selectedIndex ")' no hace nada, necesita 'prop (" selectedIndex ")'. Demostración: http://jsfiddle.net/Nj85e/ –

2

Usted puede obtener el índice del elemento, en este caso por el control de cuántos elementos relacionados al elemento seleccionado tiene ante sí:

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

Esto parece una ronda sobre la forma de obtener el índice seleccionado, ¿cuál es el costo de prevAll? – Bob

+1

Tiene razón, verificando que el Índice seleccionado sea mejor en este caso. prevAll() sin embargo, debería ser más rápido que juguetear con el método nativo .index() aquí que era la solución inicial del OP (a menos que use jQuery 1.3.3) –

17

Sólo segunda respuesta de Bob es correcta:

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

Obras : http://jsfiddle.net/b9chris/wxeVN/1/

El uso de .attr() funciona solo si el usuario (o la restauración de DOM del navegador) no ha cambiado th opción de correo seleccionado desde la página cargado: http://jsfiddle.net/b9chris/wxeVN/

Se podría aplicar esto como una extensión de jQuery, y obtener un poco más de información en el proceso:

(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/

lo que está devuelto por .selectedOption() es la etiqueta de opción real, para que pueda acceder .index, .value y .text - un poco más conveniente que sólo el índice en el uso típico.

10

Mientras escribo esto, dos de los mejores respuestas (incluyendo la respuesta aceptada) son incorrectas a pesar de ser señalado hace casi cinco años. attr("selectedIndex") no hace nada, porque selectedIndex es una propiedad en el elemento DOM real, no un atributo HTML. Es necesario utilizar prop:

$(this).prop('selectedIndex') 

Demostración interactiva comparar esto con la versión incorrecta: http://jsfiddle.net/uvwkD/

+2

Esta es la única solución en esta página que realmente funciona ... –

1

Utilice la función de índice estándar de jQuery como en este ejemplo de código

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

+0

i encontró esto más útil. Esp cuando multiple = true – wallop

0

El título no coincide con la pregunta ...

¿Cómo obtener el Índice de Seleccionar-> etiqueta de opción

option.index // javascript 

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

índice de seleccionado Seleccionar-> opción de la etiqueta:

document.getElementById('sel').selectedIndex // javascript 
Cuestiones relacionadas