2009-04-05 27 views
10

Tengo una lista desplegable y he vinculado un controlador de eventos de cambio. Cada vez que el usuario selecciona una nueva opción, quiero saber si es la última opción de la lista.¿Cuál es la mejor manera de verificar si la opción actualmente seleccionada en una lista desplegable es la última?

un fastidio, la condición correspondiente en el siguiente fragmento de código devuelve siempre cierto, independientemente de la opción ha sido seleccionada:

 sel.change(function() { 
      //this always returns true! 
      if(jQuery('#' + this.id + ' option').is(':last')) { 
       alert('hello I am the last option'); 
       inputDiv.show(); 
       inputDiv.find("input").attr('disabled',false); 
      } else { 
       inputDiv.hide(); 
       inputDiv.find("input").attr('disabled',true); 
      } 
     }); 

Incluso si hago esto, el resultado es el mismo:

if(jQuery('#' + this.id + ' option:selected').is(':last')) { 
... 

¿Qué estoy haciendo mal? Y si sabes, ¿por qué esas pruebas se evalúan como verdaderas?

EDIT: Se encuentra la solución:

if(jQuery('#' + this.id + ' option:last').is(':selected')) { 
... 
} 

¿Alguien sabe una mejor manera de hacer esto?

+1

Si usted tiene una solución a su propia pregunta puede agregarlo como una respuesta no una edición a la pregunta. Además, la opción no-jquery de porneL puede ser un poco más rápida. – bendewey

+0

+1 para el título descriptivo de la pregunta – Tjorriemorrie

Respuesta

18

¡Mira, no hay problema!

sel.selectedIndex == sel.length-1 

Eso es W3C standard solution.

+0

Lo admito, eso es mejor. Gracias. – karim79

+0

Habría esperado que jQuery podría haber hecho esto un poco más elegante ... –

+0

Es cierto, eso no se ve "jQuerish", pero este método es tan simple, que no necesita ningún contenedor de conveniencia. – Kornel

10

Hey, aquí está otra ... y es "jQuerish" :)

$("select option:last").is(":selected") 
Cuestiones relacionadas