Nhận giá trị / văn bản đã chọn từ Chọn khi thay đổi


96
<select onchange="test()" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
</select>

Tôi cần lấy giá trị của tùy chọn đã chọn trong javascript: có ai biết cách lấy giá trị hoặc văn bản đã chọn, vui lòng cho biết cách viết một hàm cho nó. Tôi đã gán hàm onchange () để chọn, vậy tôi phải làm gì sau đó?



1
Nếu bạn chỉ muốn valuenhững optionđiều đó đã được lựa chọn sau đó ... <select onchange="window.alert(this.value);">... option ... </select>... nên ya chỉ đó và không có gì hơn.
S0AndS0 Ngày

Câu trả lời:


114

Sử dụng JavaScript hoặc jQuery cho việc này.

Sử dụng JavaScript

<script>
function val() {
    d = document.getElementById("select_id").value;
    alert(d);
}
</script>

<select onchange="val()" id="select_id">

Sử dụng jQuery

$('#select_id').change(function(){
    alert($(this).val());
})

.value () hoạt động trên các trình duyệt hiện đại nhưng không hoạt động trên các trình duyệt thực sự cũ. Xem bytes.com/topic/javascript/answers/…
Benissimo

2
@PlayHardGoPro Đó là giá trị đã chọn. Nếu bạn muốn văn bản (ví dụ - Chọn- hoặc Giao tiếp), bạn sẽ sử dụng văn bản: select.texthoặc trong jQuery select.text().
ricksmt

Thiếu một dấu chấm phẩy ở cuối của jquery đó ... :)
lindhe

Sử dụng jQuery $('#select_id option:selected').text().Đây sẽ trở lại với văn bản của các tùy chọn chọn, Chọn hoặc Truyền thông
Paulo Borralho Martins

1
vani cách tiếp cận javascript: document.getElementById("select_id").onchange = (evt) => { console.log(evt.srcElement.value); }
Spencer

44

Nếu bạn đang tìm kiếm điều này và không muốn trình xử lý sự kiện là một thuộc tính, hãy sử dụng:

document.getElementById('my-select').addEventListener('change', function() {
  console.log('You selected: ', this.value);
});
<select id="my-select">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>


30

function test(a) {
    var x = (a.value || a.options[a.selectedIndex].value);  //crossbrowser solution =)
    alert(x);
}
<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2">Communication</option>
    <option value="3">Communication</option>
</select>


những gì là a.valuegì? Có trình duyệt nào thực sự hỗ trợ như vậy không? chúng ta không thể chỉ sử dụng a.options[a.selectedIndex].value?
Ẩn danh

@Anonymous <để có được những subj =)
el Dude

27

Không cần một chức năng thay đổi. Bạn có thể lấy giá trị trong một dòng:

document.getElementById("select_id").options[document.getElementById("select_id").selectedIndex].value;

Hoặc, chia nó ra để dễ đọc hơn:

var select_id = document.getElementById("select_id");

select_id.options[select_id.selectedIndex].value;

20

Chà, chưa có giải pháp nào thực sự có thể tái sử dụng trong số các câu trả lời .. Ý tôi là, một trình xử lý sự kiện độc lập sẽ chỉ nhận được một eventđối số và hoàn toàn không phải sử dụng id .. Tôi sẽ sử dụng:

function handleSelectChange(event) {

    // if you want to support some really old IEs, add
    // event = event || window.event;

    var selectElement = event.target;

    var value = selectElement.value;
    // to support really old browsers, you may use
    // selectElement.value || selectElement.options[selectElement.selectedIndex].value;
    // like el Dude has suggested

    // do whatever you want with value
}

Bạn có thể sử dụng trình xử lý này với mỗi - js nội tuyến:

<select onchange="handleSelectChange(event)">
    <option value="1">one</option>
    <option value="2">two</option>
</select>

jQuery:

jQuery('#select_id').on('change',handleSelectChange);

hoặc cài đặt trình xử lý vanilla JS:

var selector = document.getElementById("select_id");
selector.onchange = handleSelectChange;
// or
selector.addEventListener('change', handleSelectChange);

Và không cần phải viết lại điều này cho mỗi selectphần tử bạn có.

Đoạn mã ví dụ:

function handleSelectChange(event) {

    var selectElement = event.target;
    var value = selectElement.value;
    alert(value);
}
<select onchange="handleSelectChange(event)">
    <option value="1">one</option>
    <option value="2">two</option>
</select>


2
Giải pháp tuyệt vời, nên được chấp nhận. Sử dụng phần tử sự kiện thuần túy, không tham chiếu tài liệu DOM là cách linh hoạt nhất hoạt động trong nhiều môi trường như React, Vue hoặc chỉ các dạng HTML thuần túy.
VanDavv

8
let dropdown = document.querySelector('select');
if (dropdown) dropdown.addEventListener('change', function(event) {
    console.log(event.target.value);
});

Cách tiếp cận này rất hữu ích nếu bạn đang làm việc với các hàm mũi tên.
Franchy

bất kỳ hàm mũi tên nào cũng có thể được thay thế bằng hàm () {}, điều tương tự
Russell Strauss

nó không giống nhau. thistrong một hàm mũi tên lấy ngữ cảnh của nó từ môi trường từ vựng của nó nhưng hàm bình thường có điều này riêng của nó. Kiểm tra cái này
Franchy

6

Sử dụng

document.getElementById("select_id").selectedIndex

Hoặc để nhận giá trị:

document.getElementById("select_id").value

cách nhận giá trị này sẽ không hoạt động trong các trình duyệt cũ, hãy sử dụng giải pháp của Danny để thay thế
wlf

5
<script>
function test(a) {
    var x = a.selectedIndex;
    alert(x);
}
</script>
<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2">Communication</option>
    <option value="3">Communication</option>
</select>

trong cảnh báo, bạn sẽ thấy giá trị INT của chỉ mục đã chọn, coi lựa chọn như một mảng và bạn sẽ nhận được giá trị


5

HTML:

<select onchange="cityChanged(this.value)">
      <option value="CHICAGO">Chicago</option>
      <option value="NEWYORK">New York</option>
</select>

JS:

function cityChanged(city) {
    alert(city);
}

4

Tôi tự hỏi rằng mọi người đã đăng về valuetexttùy chọn để lấy từ đó <option>và không ai đề xuất label.

Vì vậy, tôi cũng đang đề xuất label, như được hỗ trợ bởi tất cả các trình duyệt

Để có được value(giống như những người khác đề xuất)

function test(a) {
var x = a.options[a.selectedIndex].value;
alert(x);
}

Để lấy option text(tức là Giao tiếp hoặc -Chọn-)

function test(a) {
var x = a.options[a.selectedIndex].text;
alert(x);
}

HOẶC (Đề xuất mới)

function test(a) {
var x = a.options[a.selectedIndex].label;
alert(x);
}

HTML

<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2" label=‘newText’>Communication</option>
</select>

Lưu ý: Trong HTML ở trên cho optiongiá trị 2, labelsẽ trả về newText thay vì Communication

Cũng thế

Lưu ý: Không thể đặt thuộc tính nhãn trong Firefox (chỉ trả về).


3

Đây là một câu hỏi cũ, nhưng tôi không chắc tại sao mọi người không đề xuất sử dụng đối tượng sự kiện để truy xuất thông tin thay vì tìm kiếm lại qua DOM.

Chỉ cần đi qua đối tượng sự kiện trong hàm onChange của bạn, xem ví dụ bên dưới

function test() { console.log(event.srcElement.value); }

http://jsfiddle.net/Corsico/3yvh9wc6/5/

Có thể hữu ích cho những người đang tìm kiếm điều này ngày hôm nay nếu đây không phải là hành vi mặc định 7 năm trước


2

function test(){
  var sel1 = document.getElementById("select_id");
  var strUser1 = sel1.options[sel1.selectedIndex].value;
  console.log(strUser1);
  alert(strUser1);
  // Inorder to get the Test as value i.e "Communication"
  var sel2 = document.getElementById("select_id");
  var strUser2 = sel2.options[sel2.selectedIndex].text;
  console.log(strUser2);
  alert(strUser2);
}
<select onchange="test()" id="select_id">
  <option value="0">-Select-</option>
  <option value="1">Communication</option>
</select>


0

function test(){
  var sel1 = document.getElementById("select_id");
  var strUser1 = sel1.options[sel1.selectedIndex].value;
  console.log(strUser1);
  alert(strUser1);
  // Inorder to get the Test as value i.e "Communication"
  var sel2 = document.getElementById("select_id");
  var strUser2 = sel2.options[sel2.selectedIndex].text;
  console.log(strUser2);
  alert(strUser2);
}
<select onchange="test()" id="select_id">
  <option value="0">-Select-</option>
  <option value="1">Communication</option>
</select>

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;

-1

Tôi đã cố gắng giải thích với mẫu của riêng tôi, nhưng tôi hy vọng nó sẽ giúp bạn. Bạn không cần onchange = "test ()" Vui lòng chạy đoạn mã để nhận kết quả trực tiếp.

document.getElementById("cars").addEventListener("change", displayCar);

function displayCar() {
  var selected_value = document.getElementById("cars").value;
  alert(selected_value);
}
<select id="cars">
  <option value="bmw">BMW</option>
  <option value="mercedes">Mercedes</option>
  <option value="volkswagen">Volkswagen</option>
  <option value="audi">Audi</option>
</select>


Thay đổi tốt hơn nhiều so với sự kiện nhấp chuột vì nó không phải là ung thư khi chọn một tùy chọn.
Riley Carney

@RileyCarney tốt, nó phụ thuộc, thay vì thay đổi mã cấu trúc lại trên phần ui khi thay đổi tên hàm trên phần js, nó thanh lịch hơn và btw tôi không thấy bất kỳ sự kiện nhấp chuột nào.

Bạn đã chỉnh sửa nó để loại bỏ sự kiện onclick haha. Thật mờ ám, trước khi bạn thực hiện nhấp vào, nó đã có thông báo nếu bạn nhấp vào nó cho ô tô. edited 7 hours agoÍt nhất bạn đã sửa mã không hoạt động tốt.
Riley Carney
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.