2009-08-04 5 views
18

Je me demandais simplement s'il était possible de passer par plusieurs options de sélection et d'obtenir leurs valeurs et leur texte (si l'un d'eux est sélectionné, obtenir la valeur et le texte valeurs et texte et ainsi de suite)comment passer en revue plusieurs options de sélection avec jquery

J'ai 15 boîtes de sélection dans une page?

toute aide serait appréciée.

<form> 
     <select class="select" name="select3" id="select3"> 
      <option value="0">0</option> 
      <option value="1.99">1</option> 
      <option value="1.99">2</option> 
      <option value="1.99">3</option> 
      <option value="1.99">4</option> 
      <option value="1.99">5</option> 
      <option value="1.99">6</option> 
      <option value="1.99">7</option> 
      <option value="1.99">8</option> 
     </select> 
     </form> 

    <form> 
     <select class="select" name="select" id="select"> 
      <option value="0">0</option> 
      <option value="1.99">1</option> 
      <option value="1.99">2</option> 
      <option value="1.99">3</option> 
      <option value="1.99">4</option> 
      <option value="1.99">5</option> 
      <option value="1.99">6</option> 
      <option value="1.99">7</option> 
      <option value="1.99">8</option> 
      </select> 
    </form> 

toutes les options de sélection ont la même classe.

grâce

Répondre

40

Cela alertera tout le texte des options sélectionnées et les valeurs (pour toutes les sélections sur la page):

$('select > option:selected').each(function() { 
    alert($(this).text() + ' ' + $(this).val()); 
}); 

Voir base/chacun et Selectors/sélectionnés:

http://docs.jquery.com/Core/each

http://docs.jquery.com/Selectors/selected

+0

devrait-il pas: $ ('# sélectionner> ... – jon

+0

Son un __gVirt_NP_NN_NNPS<__ USECASE mal définie, où la classe, le nom, id et l'étiquette sont tous les mêmes $ ('select> ..., $ (' # select> ..., $ (. select ... tout va fonctionner –

3

Cette fonction renvoie un tableau de paires texte/valeur pour les sélections correspondant à la classe donnée.

function getSelects(klass) { 
    var selected = []; 
    $('select.' + klass).children('option:selected').each(function() { 
     var $this = $(this); 
     selected.push({ text: $this.text(), value: $this.val() }); 
    }); 
    return selected; 
} 
0
//Another option 

var selected = []; 

$('select :has(:selected)').each(function(){ 

    var $this = $(this); 
    selected.push({ text: $this.text(), value: $this.val()); 

}); 

return selected; 
2

Si tous vos cochez les cases commencent par un identifiant similaire ("de select_1", "select_2", "select_3", etc.), vous pouvez tout faire:

var arr = []; 
$("select[id^='select_']").children('option:selected').each(function(){ 
    //you will do this once for every selected item... 
} 

Cette vous permet de parcourir uniquement des zones de sélection spécifiques, au cas où vous avez plusieurs groupes.

+0

Merci pour la réponse. puis-je utiliser une fonction .change aussi dans le code ci-dessus , comme .... .change.each (function() { – amir

+0

bien si vous envelopper la modification dans une fonction anonyme oui .change (function() { $ ('select'). chaque ..... }); – redsquare

6

pour optgroups ...

$("select[id^='desu']").children('optgroup').children('option:selected').each( 
    function(id, element) { 
     document.write(element.title); 
    } 
); 
+0

Merci pour ce Montana! –

+0

aha la fonction children() - juste ce que je cherchais! –

Questions connexes