2009-04-05 10 views
10

Ho un elenco a discesa e vi ho associato un gestore di eventi di modifica. Ogni volta che l'utente seleziona una nuova opzione, voglio sapere se è l'ultima opzione della lista.Qual è il modo migliore per verificare se l'opzione attualmente selezionata in un elenco a discesa è l'ultima?

Fastidiosamente, la condizione rilevante nel frammento di seguito restituisce true sempre, è stato selezionato, non importa quale opzione:

 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); 
      } 
     }); 

Anche se faccio questo, il risultato è lo stesso:

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

Cosa sto sbagliando? E se lo sapete, perché questi test valutano entrambi come veri?

EDIT: trovato la soluzione:

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

Qualcuno conosce un modo migliore di fare questo?

+1

Se si dispone di una soluzione al vostro proprio domanda è possibile aggiungerlo come non risposta una modifica alla domanda. Inoltre, l'opzione non jquery per porneL potrebbe essere leggermente più veloce. – bendewey

+0

+1 per la domanda descrittiva titolo – Tjorriemorrie

risposta

18

Guarda, non gonfiare!

sel.selectedIndex == sel.length-1 

Questo è W3C standard solution.

+0

Ammetto che è meglio. Grazie. – karim79

+0

Avrei sperato che jQuery avrebbe potuto farlo un po 'più elegantemente .. –

+0

Vero, quello non sembra "jQuerish", ma questo metodo è così semplice, che non ha bisogno di alcun wrapper di convenienza. – Kornel

10

Ehi, qui è un altro ... ed è "jQuerish" :)

$("select option:last").is(":selected") 
Problemi correlati