2009-08-04 22 views
18

Zastanawiam się, czy można przejść przez wiele opcji i uzyskać ich wartości i tekst (jeśli jest wybrany, otrzymaj wartość i tekst, jeśli wybrano 2, obie z nich otrzymają wartości i tekst itd.)jak iterować przez wiele opcji wyboru z jquery

Mam 15 wybranych pól na jednej stronie?

każda pomoc byłaby doceniona.

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

wszystkie wybrane opcje mają tę samą klasę.

dzięki

Odpowiedz

40

To ostrzec cały tekst i wartości dla wybranych (dla wszystkich wybiera na stronie):

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

See rdzeń/każdy i selektorów/Akcja:

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

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

+0

nie powinno być: $ ('# select> ... – jon

+0

Jego słabo zdefiniowane USECASE, gdzie klasa, nazwa, id tag i są takie same name. $ ('select> ..., $ (' # select> ..., $ (. select ... wszystko zadziała –

3

Ta funkcja zwróci tablicę par tekstu/wartości dla zaznaczeń pasujących do danej klasy.

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

przypadku wszystkich wybranych polach początek podobnym id ("select_1", "select_2", "select_3" itp), można po prostu zrobić:

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

ten pozwala przechodzić tylko przez określone pola wyboru, jeśli masz wiele grupowań.

+0

Dziękuję za odpowiedź.Czy mogę użyć funkcji .change również w powyższym kodzie , tak jak .... .change.each (funkcja() { – amir

+0

dobrze, jeśli zapakujesz zmianę w anonimowej funkcji tak .change (function() { $ ("wybierz"). Każdy ..... }); – redsquare

6

dla optgroups ...

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

Dzięki za ten Montana! –

+0

aha the children() function - właśnie tego szukałem! –

Powiązane problemy