2009-08-04 34 views
18

Tôi đã tự hỏi liệu có thể đi qua nhiều tùy chọn được chọn và nhận giá trị và văn bản của chúng hay không (nếu được chọn có giá trị và văn bản, nếu 2 được chọn nhận cả hai giá trị và văn bản, v.v.)Làm thế nào để lặp qua nhiều tùy chọn được chọn với jquery

Tôi có 15 hộp chọn trong một trang?

bất kỳ trợ giúp nào sẽ được đánh giá cao.

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

tất cả các tùy chọn chọn có cùng một lớp.

nhờ

Trả lời

40

này sẽ cảnh báo tất cả các văn bản và các giá trị tùy chọn đã chọn (cho tất cả Selects trên trang):

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

Xem Core/mỗi và Selectors/chọn:

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

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

+0

nó không nên là: $ ('# chọn> ... – jon

+0

Its a usecase kém được xác định, nơi mà các lớp, tên, id và thẻ đều như nhau name. $ ('select> ..., $ (' # select> ..., $ (. select ... tất cả sẽ hoạt động –

3

Hàm này sẽ trả về một mảng các cặp văn bản/giá trị cho các lựa chọn phù hợp với lớp đã cho.

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

Nếu tất cả các hộp chọn của bạn bắt đầu với một id tương tự ("select_1", "select_2", "select_3", vv), bạn chỉ có thể làm:

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

này cho phép bạn lặp qua các hộp chọn cụ thể, trong trường hợp bạn có nhiều nhóm.

+0

Cảm ơn bạn đã trả lời. Tôi có thể sử dụng hàm .change cũng như trong đoạn ở trên không , như .... .change.each (function() { – amir

+0

cũng nếu bạn bọc thay đổi trong một chức năng ẩn danh có .change (function() { $ ('select'). }); – redsquare

6

cho optgroups ...

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

Cảm ơn Montana này! –

+0

aha hàm children() - chỉ là những gì tôi đang tìm kiếm! –

Các vấn đề liên quan