2009-04-05 7 views
10

J'ai une liste déroulante et j'ai lié un gestionnaire d'événement change à celui-ci. Chaque fois que l'utilisateur sélectionne une nouvelle option, je veux savoir s'il s'agit de la dernière option de la liste.Quelle est la meilleure façon de vérifier si l'option actuellement sélectionnée dans une liste déroulante est la dernière?

Fâcheusement, la condition pertinente dans l'extrait ci-dessous retourne toujours vrai, peu importe quelle option a été sélectionnée:

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

Même si je fais cela, le résultat est le même:

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

Qu'est-ce que je fais mal? Et si vous le savez, pourquoi ces tests sont-ils tous les deux jugés vrais?

EDIT: Trouvé la solution:

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

Est-ce que quelqu'un connaît une meilleure façon de le faire?

+1

Si vous avez une solution à votre question, vous pouvez l'ajouter comme une réponse non modifié à la question. De plus, l'option non-jquery de porneL peut être légèrement plus rapide. – bendewey

+0

+1 pour le titre de la question descriptive – Tjorriemorrie

Répondre

18

Regardez, pas de ballonnement!

sel.selectedIndex == sel.length-1 

C'est W3C standard solution.

+0

J'avoue, c'est mieux. Merci. – karim79

+0

J'aurais espéré que jQuery pourrait l'avoir fait un peu plus élégamment .. –

+0

Vraiment, cela ne semble pas "jQuerish", mais cette méthode est si simple, qu'il n'a pas besoin de commodité. – Kornel

10

Hey, voici un autre ... et il est « jQuerish » :)

$("select option:last").is(":selected") 
Questions connexes