jQuery chọn tùy chọn từ thả xuống


1128

Thông thường tôi sử dụng $("#id").val()để trả về giá trị của tùy chọn đã chọn, nhưng lần này nó không hoạt động. Thẻ được chọn có idaioConceptName

Mã HTML

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>

2
bạn có thể hiển thị đánh dấu của yếu tố#aioConceptName
Jorge

2
Thật lạ vì hoạt động trên ví dụ này jsfiddle.net/pAtVP , bạn có chắc chắn rằng sự kiện mà nó kích hoạt trong sự đố kị của bạn không?
Jorge


11
Một suy nghĩ muộn, nhưng .val () sẽ không hoạt động trừ khi bạn đặt valuethuộc tính trên các <option>s đó, phải không?
Jacob Valenta

8
Các phiên bản gần đây của jQuery (được thử nghiệm với 1.9.1) không có vấn đề gì với đánh dấu này. Đối với ví dụ trên, $("#aioConceptName").val()trả về choose io.
Salman A

Câu trả lời:


1846

Đối với các tùy chọn thả xuống, bạn có thể muốn một cái gì đó như thế này:

var conceptName = $('#aioConceptName').find(":selected").text();

Lý do val()không thực hiện được mẹo là vì nhấp vào một tùy chọn sẽ không thay đổi giá trị của danh sách thả xuống - nó chỉ thêm thuộc :selectedtính vào tùy chọn đã chọn là con của danh sách thả xuống.


41
À, được rồi, bạn đã cập nhật câu hỏi của bạn với HTML. Câu trả lời này bây giờ không liên quan. Như một vấn đề thực tế, .val()nên hoạt động trong trường hợp của bạn-- bạn phải có một lỗi ở nơi khác.
Elliot Boneville

13
val()sao không dùng var conceptVal = $("#aioConceptName option").filter(":selected").val();?
kiểm tra

61
Làm thế nào về một đơn giản hơn var conceptVal = $("#aioConceptName option:selected").val()?
Klemen Tušar

5
Tôi vẫn thấy điều này hữu ích cho việc tìm kiếm tùy chọn đã chọn trong một lựa chọn nơi tôi đã nhận được danh sách thả xuống trước đó - ví dụ: var mySelect = $('#mySelect'); / * ... nhiều mã xảy ra ... * / var selectedText = mySelect.find(':selected').text();
Charles Wood

18
Trên thực tế, lý do .val () không hiệu quả với anh ta là vì anh ta thực sự không cung cấp cho các tùy chọn của mình một giá trị, đó là lý do tại sao anh ta phải sử dụng phương thức của bạn để truy xuất văn bản đã chọn, do đó, một cách khắc phục khác sẽ thay đổi <tùy chọn> chọn io </ tùy chọn> thành <tùy chọn giá trị = 'chọn io'> chọn io </ tùy chọn> Mặc dù giải pháp của bạn có thể nhanh hơn và thực tế hơn, tôi nghĩ rằng tôi sẽ nói rõ hơn để anh ấy hiểu rõ hơn Tại sao nó không làm việc cho anh ta.
Jordan LaPawn

342

Đặt các giá trị cho mỗi tùy chọn

<select id="aioConceptName">
    <option value="0">choose io</option>
    <option value="1">roma</option>
    <option value="2">totti</option>
</select>

$('#aioConceptName').val()không hoạt động vì .val()trả về valuethuộc tính. Để nó hoạt động chính xác, các valuethuộc tính phải được đặt trên mỗi <option>.

Bây giờ bạn có thể gọi $('#aioConceptName').val()thay vì tất cả các :selectedvoodoo này được đề xuất bởi những người khác.


12
Hãy cẩn thận: nếu không có tùy chọn nào được chọn, $('#aioConceptName').val()trả về null / "không xác định"
gordon

Điều này đảm bảo với tôi rằng $ ('# myselect'). Val () là chính xác Tôi chỉ quên một cách ngu ngốc để cung cấp cho id chọn!
zzapper

4
Một trong những lựa chọn của tôi là một prompttùy chọn đặc biệt <option>Please select an option</option>. Trong trường hợp của tôi, việc thêm thuộc tính giá trị trống không phải là vấn đề <option value="">Please...</option>nhưng tôi tin rằng trong một số trường hợp không có thuộc tính giá trị thì có ý nghĩa. Nhưng +1 vì từ ngữ vodoo của bạn làm tôi mỉm cười.
Cyril Duchon-Doris

Không val()chọn valuethay vì văn bản bên trong option? Tức là nó chọn 1thay vì roma.
deathlock

4
@deathlock Đó là toàn bộ quan điểm của .val(). Nếu bạn đang tìm cách thao tác / sử dụng văn bản, hãy sử dụng $(":selected).text()hoặc đặt giá trị và văn bản giống nhau.
Jacob Valenta

162

Tôi tình cờ gặp câu hỏi này và đã phát triển một phiên bản ngắn gọn hơn cho câu trả lời của Elliot BOnneville:

var conceptName = $('#aioConceptName :selected').text();

hoặc nói chung:

$('#id :pseudoclass')

Điều này giúp bạn tiết kiệm thêm một cuộc gọi jQuery, chọn mọi thứ trong một lần chụp và rõ ràng hơn (ý kiến ​​của tôi).


1
@JohnConde Câu trả lời được chấp nhận trên Meta không đồng ý với bạn: meta.stackexchange.com/questions/87678/ . Theo tôi, Ed đã đưa ra một câu trả lời tốt và chỉ cung cấp thêm một số tài liệu tham khảo.
itbruce

Họ có thể cho phép nhưng đó vẫn là một tài nguyên tồi
John Conde

1
Đã xóa liên kết w3schools, nó không thực sự cần thiết và một tìm kiếm Google cho "các lớp pseduo của jQuery" cung cấp nhiều thông tin.
Ed Orsi

@EdOrsi: Mặc dù nó lưu một cuộc gọi jQuery bổ sung, nhưng nó ngăn chặn việc tận dụng lợi thế tăng hiệu suất được cung cấp bởi querySelectorAll()phương thức DOM gốc (xem tài liệu jQuery ). Vì vậy, nó nên chậm hơn giải pháp của Eliot .
Alexander Abakumov

Có lẽ tôi thích sử dụng .find(':selected')vì nó cho phép bạn gọi nó từ một cuộc gọi lại gắn liền với một sự kiện ... như$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest

58

Hãy thử điều này cho giá trị ...

$("select#id_of_select_element option").filter(":selected").val();

hoặc cái này cho văn bản ...

$("select#id_of_select_element option").filter(":selected").text();

49

Nếu bạn đang ở trong bối cảnh sự kiện, trong jQuery, bạn có thể truy xuất phần tử tùy chọn đã chọn bằng cách sử dụng:
$(this).find('option:selected')như thế này:

$('dropdown_selector').change(function() {
    //Use $option (with the "$") to see that the variable is a jQuery object
    var $option = $(this).find('option:selected');
    //Added with the EDIT
    var value = $option.val();//to get content of "value" attrib
    var text = $option.text();//to get <option>Text</option> content
});

Biên tập

Như được đề cập bởi PossessWithin , câu trả lời của tôi chỉ trả lời cho câu hỏi: Cách chọn "Tùy chọn" đã chọn.

Tiếp theo, để có được giá trị tùy chọn, sử dụng option.val().


2
Hoàn hảo! Chỉ cần đừng quên bạn nên thêm $(this).find('option:selected').val()vào cuối để có được giá trị của phần tử tùy chọn hoặc $(this).find('option:selected').text()để có được văn bản. :)
Pháo đài Diego



16

Đọc giá trị (không phải văn bản) của một lựa chọn:

var status = $("#Status").val();
var status = $("#Status")[0].value;
var status = $('#Status option:selected').val();

Làm thế nào để vô hiệu hóa một lựa chọn? trong cả hai biến thể, giá trị có thể được thay đổi bằng cách sử dụng:

Một

Người dùng không thể tương tác với danh sách thả xuống. Và anh ta không biết những lựa chọn khác có thể tồn tại.

$('#Status').prop('disabled', true);

B

Người dùng có thể thấy các tùy chọn trong danh sách thả xuống nhưng tất cả chúng đều bị tắt:

$('#Status option').attr('disabled', true);

Trong trường hợp này, $("#Status").val() sẽ chỉ hoạt động cho các phiên bản jQuery nhỏ hơn 1.9.0. Tất cả các biến thể khác sẽ làm việc.

Làm thế nào để cập nhật một lựa chọn bị vô hiệu hóa?

Từ mã phía sau bạn vẫn có thể cập nhật giá trị trong lựa chọn của bạn. Nó chỉ bị vô hiệu hóa cho người dùng:

$("#Status").val(2);

Trong một số trường hợp, bạn có thể cần phải bắn các sự kiện:

$("#Status").val(2).change();

11
<select id="form-s" multiple="multiple">
    <option selected>city1</option>
    <option selected value="c2">city2</option>
    <option value="c3">city3</option>
</select>   
<select id="aioConceptName">
    <option value="s1" selected >choose io</option>
    <option value="s2">roma </option>
    <option value="s3">totti</option>
</select>
<select id="test">
    <option value="s4">paloma</option>
    <option value="s5" selected >foo</option>
    <option value="s6">bar</option>
</select>
<script>
$('select').change(function() {
    var a=$(':selected').text(); // "city1city2choose iofoo"
    var b=$(':selected').val();  // "city1" - selects just first query !
    //but..
    var c=$(':selected').map(function(){ // ["city1","city2","choose io","foo"]
        return $(this).text();
    }); 
    var d=$(':selected').map(function(){ // ["city1","c2","s1","s5"]
        return $(this).val();
    });
    console.log(a,b,c,d);
});
</script>

:) điều tuyệt vời là :selected.. val () hoặc văn bản () không hoạt động chính xác trên nhiều tùy chọn chọn, chỉ khi một số mảng được tạo ra từ nó như map()có thể làm.
Ol Sen


9

Sử dụng jQuery, chỉ cần thêm một changesự kiện và nhận giá trị hoặc văn bản đã chọn trong trình xử lý đó.

Nếu bạn cần văn bản đã chọn, vui lòng sử dụng mã này:

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").text())
});

Hoặc nếu bạn cần giá trị được chọn, vui lòng sử dụng mã này:

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").attr('value'))
});

9

Sử dụng jQuery.val()chức năng cho các yếu tố chọn, quá:

Phương thức .val () chủ yếu được sử dụng để lấy các giá trị của các phần tử biểu mẫu như đầu vào, chọn và textarea. Trong trường hợp các phần tử được chọn, nó trả về nullkhi không có tùy chọn nào được chọn và một mảng chứa giá trị của mỗi tùy chọn được chọn khi có ít nhất một và có thể chọn thêm vì có multiplethuộc tính.

$(function() {
  $("#aioConceptName").on("change", function() {
    $("#debug").text($("#aioConceptName").val());
  }).trigger("change");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<select id="aioConceptName">
  <option>choose io</option>
  <option>roma</option>
  <option>totti</option>
</select>
<div id="debug"></div>


8

Đối với bất cứ ai phát hiện ra rằng câu trả lời tốt nhất không hoạt động.

Thử sử dụng:

  $( "#aioConceptName option:selected" ).attr("value");

Làm việc cho tôi trong các dự án gần đây vì vậy nó là giá trị để xem xét nó.


7

Chỉ cần điều này sẽ làm việc:

var conceptName = $('#aioConceptName').val();

6

Thẳng về phía trước và khá dễ dàng:

Thả xuống của bạn

<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>

Mã Jquery để lấy giá trị đã chọn

$('#aioConceptName').change(function() {
    var $option = $(this).find('option:selected');

    //Added with the EDIT
    var value = $option.val(); //returns the value of the selected option.
    var text = $option.text(); //returns the text of the selected option.
});

4

Bạn có thể thử gỡ lỗi theo cách này:

console.log($('#aioConceptName option:selected').val())

4

Để lấy giá trị của thẻ được chọn:

 $('#id_Of_Parent_Selected_Tag').find(":selected").val();

Và nếu bạn muốn nhận văn bản, hãy sử dụng mã này:

 $('#id_Of_Parent_Selected_Tag').find(":selected").text();

Ví dụ:

<div id="i_am_parent_of_select_tag">
<select>
        <option value="1">CR7</option>
        <option value="2">MESSI</option>
</select>
</div>


<script>
 $('#i_am_parent_of_select_tag').find(":selected").val();//OUTPUT:1 OR 2
 $('#i_am_parent_of_select_tag').find(":selected").text();//OUTPUT:CR7 OR MESSI
</script>

2

Nếu bạn muốn lấy thuộc tính 'value' thay vì nút văn bản, điều này sẽ phù hợp với bạn:

var conceptName = $('#aioConceptName').find(":selected").attr('value');

Đây chỉ là một phần giải pháp - cũng cần thiết phải đặt giá trị cho mỗi tùy chọn - điều này đã được bao phủ bởi câu trả lời của Jacob Valetta
David

2

cố gắng lên cái này

$(document).ready(function() {

    $("#name option").filter(function() {
        return $(this).val() == $("#firstname").val();
    }).attr('selected', true);

    $("#name").live("change", function() {

        $("#firstname").val($(this).find("option:selected").attr("value"));
    });
});


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<select id="name" name="name"> 
<option value="">Please select...</option> 
<option value="Elvis">Elvis</option> 
<option value="Frank">Frank</option> 
<option value="Jim">Jim</option> 
</select>

<input type="text" id="firstname" name="firstname" value="Elvis" readonly="readonly">

2
$('nameofDropDownList').prop('selectedIndex', whateverNumberasInt);

Hãy tưởng tượng DDL là một mảng với các chỉ mục, bạn đang chọn một chỉ mục. Chọn một cái mà bạn muốn đặt nó với JS của bạn.




1

để tìm nạp một lựa chọn với cùng một lớp = tên bạn có thể làm điều này, để kiểm tra xem một tùy chọn chọn có được chọn không.

var bOK = true;
$('.optKategorien').each(function(index,el){
    if($(el).find(":selected").text() == "") {
        bOK = false;
    }
});

1

Tôi có cùng một vấn đề và tôi đã tìm ra lý do tại sao nó không hoạt động trong trường hợp của tôi
Trang html được chia thành các đoạn html khác nhau và tôi thấy rằng tôi có một trường đầu vào khác mang cùng Id của selectnó, khiến val()cho nó luôn trống
Tôi hy vọng điều này sẽ tiết kiệm trong ngày cho bất cứ ai có vấn đề tương tự.


Thật vậy, điều này đánh thức tôi về vấn đề của tôi. Tôi đã tự mình sử dụng trường qty trong mục tiêu dữ liệu và .. qty_field trong chính id. Luôn luôn kiểm tra những điều cơ bản hai lần trở lên.
cdsaenz

1

để sử dụng $ ("# id"). val, Bạn nên thêm một giá trị vào tùy chọn như thế này:

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option value="choose">choose io</option>
</select>

khác, bạn có thể sử dụng

   $("#aioConceptName").find(':selected').text();

Tôi muốn giúp ..


1

Đây là giải pháp đơn giản cho vấn đề này.

$("select#aioConceptName").change(function () {
           var selectedaioConceptName = $('#aioConceptName').find(":selected").val();;
           console.log(selectedaioConceptName);
        });

1
var selectedaioConceptName = $('#aioConceptName option:selected').val();tốt hơn là sử dụng một find () khác
Sadee

0

Có lẽ đặt cược tốt nhất của bạn với loại kịch bản này là sử dụng phương thức thay đổi của jQuery để tìm giá trị hiện được chọn, như vậy:

$('#aioConceptName').change(function(){

   //get the selected val using jQuery's 'this' method and assign to a var
   var selectedVal = $(this).val();

   //perform the rest of your operations using aforementioned var

});

Tôi thích phương pháp này vì sau đó bạn có thể thực hiện các chức năng cho từng tùy chọn đã chọn trong một trường đã chọn.

Mong rằng sẽ giúp!


0

Thông thường, bạn không chỉ cần nhận được giá trị đã chọn mà còn chạy một số hành động. Vậy tại sao không tránh tất cả các phép thuật jQuery và chỉ chuyển giá trị được chọn làm đối số cho lệnh gọi hành động?

<select onchange="your_action(this.value)">
   <option value='*'>All</option>
   <option ... />
</select>

0

Bạn có thể chọn sử dụng tùy chọn được chọn chính xác: Dưới đây sẽ cung cấp cho bên trong

$("select#aioConceptName > option:selected").text()

Trong khi dưới đây sẽ cung cấp cho bạn giá trị.

$("select#aioConceptName > option:selected").val()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.