Nhận văn bản tùy chọn đã chọn bằng JavaScript


124

Tôi có một danh sách thả xuống như thế này:

<select id="box1">
<option value="98">dog</option>
<option value="7122">cat</option>
<option value="142">bird</option>
</select>

Làm cách nào để nhận văn bản tùy chọn thực tế thay vì giá trị bằng JavaScript? Tôi có thể nhận được giá trị bằng những thứ như:

<select id="box1" onChange="myNewFunction(this.selectedIndex);" >

Nhưng đúng hơn là 7122tôi muốn cat.


2
stackoverflow.com/a/1085810/1339473 xem phần này để được trợ giúp thêm
QuokMoon

có thể trùng lặp Làm cách nào để nhận giá trị đã chọn của danh sách thả xuống bằng JavaScript? - bất chấp tiêu đề, nó trả lời câu hỏi của bạn.
Felix Kling,

Câu trả lời:


226

Thử các tùy chọn

function myNewFunction(sel) {
  alert(sel.options[sel.selectedIndex].text);
}
<select id="box1" onChange="myNewFunction(this);">
  <option value="98">dog</option>
  <option value="7122">cat</option>
  <option value="142">bird</option>
</select>


28
Nguyên tắc đầu tiên khi cố gắng sử dụng regex-tiếp tục tìm kiếm Stack Overflow cho đến khi bạn nhìn thấy các giải pháp mà không cần regex-cổ vũ :)
Mirror318

2
Viết onchange mà không viết hoa sẽ rõ ràng hơn c
Simon Baars

92

JavaScript thuần túy

var sel = document.getElementById("box1");
var text= sel.options[sel.selectedIndex].text;

jQuery:

$("#box1 option:selected").text();

1
@mplungjan Tại sao bạn không nhận xét ở đây rằng jQuery sử dụng .textContent.innerTextcho .text()hoạt động của phương thức? Nó không theo tiêu chuẩn, nó hoàn toàn sai vì nó không sử dụng .text. Các phiếu phản đối ở đâu?
VisioN

InternalHTML ở đâu?
mplungjan

@mplungjan Nó không phải vậy innerHTML, innerTextthậm chí còn tệ hơn.
VisioN

Tôi thấy tùy chọn: {get: function (elem) {var val = elem.attributes.value; trở về! val || val. xác định? elem.value: elem.text;} trong 1,9
mplungjan

15

Tất cả các chức năng này và những thứ ngẫu nhiên, tôi nghĩ tốt nhất là sử dụng cái này và làm như thế này:

this.options[this.selectedIndex].text



1

Bạn sẽ cần nhận được InternalHTML của tùy chọn chứ không phải giá trị của nó.

Sử dụng this.innerHTMLthay vì this.selectedIndex.

Chỉnh sửa: Trước tiên, bạn sẽ cần lấy phần tử tùy chọn và sau đó sử dụng innerHTML.

Sử dụng this.textthay vì this.selectedIndex.


Cái này sai. Nó sẽ vẽ biểu innerHTMLđồ của <select>phần tử.
VisioN

1
 <select class="cS" onChange="fSel2(this.value);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS1" onChange="fSel(options[this.selectedIndex].value);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select><br>

 <select id="iS2" onChange="fSel3(options[this.selectedIndex].text);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS3" onChange="fSel3(options[this.selectedIndex].textContent);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS4" onChange="fSel3(options[this.selectedIndex].label);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS4" onChange="fSel3(options[this.selectedIndex].innerHTML);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <script type="text/javascript"> "use strict";
   const s=document.querySelector(".cS");

 // options[this.selectedIndex].value
 let fSel = (sIdx) => console.log(sIdx,
     s.options[sIdx].text, s.options[sIdx].textContent, s.options[sIdx].label);

 let fSel2= (sIdx) => { // this.value
     console.log(sIdx, s.options[sIdx].text,
         s.options[sIdx].textContent, s.options[sIdx].label);
 }

 // options[this.selectedIndex].text
 // options[this.selectedIndex].textContent
 // options[this.selectedIndex].label
 // options[this.selectedIndex].innerHTML
 let fSel3= (sIdx) => {
     console.log(sIdx);
 }
 </script> // fSel

Nhưng :

 <script type="text/javascript"> "use strict";
    const x=document.querySelector(".cS"),
          o=x.options, i=x.selectedIndex;
    console.log(o[i].value,
                o[i].text , o[i].textContent , o[i].label , o[i].innerHTML);
 </script> // .cS"

Và cả cái này:

 <select id="iSel" size="3">
     <option value="one">Un</option>
     <option value="two">Deux</option>
     <option value="three">Trois</option>
 </select>


 <script type="text/javascript"> "use strict";
    const i=document.getElementById("iSel");
    for(let k=0;k<i.length;k++) {
        if(k == i.selectedIndex) console.log("Selected ".repeat(3));
        console.log(`${Object.entries(i.options)[k][1].value}`+
                    ` => ` +
                    `${Object.entries(i.options)[k][1].innerHTML}`);
        console.log(Object.values(i.options)[k].value ,
                    " => ",
                    Object.values(i.options)[k].innerHTML);
        console.log("=".repeat(25));
    }
 </script>

1

Có hai giải pháp, theo như tôi biết.

cả hai điều đó chỉ cần sử dụng vani javascript

1 lựa chọn

bản thử trực tiếp

const log = console.log;
const areaSelect = document.querySelector(`[id="area"]`);

areaSelect.addEventListener(`change`, (e) => {
  // log(`e.target`, e.target);
  const select = e.target;
  const value = select.value;
  const desc = select.selectedOptions[0].text;
  log(`option desc`, desc);
});
<div class="select-box clearfix">
  <label for="area">Area</label>
  <select id="area">
    <option value="101">A1</option>
    <option value="102">B2</option>
    <option value="103">C3</option>
  </select>
</div>

2 lựa chọn

bản thử trực tiếp

const log = console.log;
const areaSelect = document.querySelector(`[id="area"]`);

areaSelect.addEventListener(`change`, (e) => {
  // log(`e.target`, e.target);
  const select = e.target;
  const value = select.value;
  const desc = select.options[select.selectedIndex].text;
  log(`option desc`, desc);
});
<div class="select-box clearfix">
  <label for="area">Area</label>
  <select id="area">
    <option value="101">A1</option>
    <option value="102">B2</option>
    <option value="103">C3</option>
  </select>
</div>



-1

Hãy thử những điều dưới đây:

myNewFunction = function(id, index) {
    var selection = document.getElementById(id);
    alert(selection.options[index].innerHTML);
};

Xem mẫu jsfiddle ở đây


1
Tại sao mọi người nhấn mạnh vào innerHTML ??? Sử dụng .text! Và tại sao lại chuyển tất cả những thứ đó vào hàm. Chỉ cần vượt qua (this) và có chức năng quyết định những gì để sử dụng
mplungjan

Eh, tôi nghĩ nó có thể tốt hơn / nhanh hơn nhưng tôi muốn nghe lời bác bỏ của @ mplungjan.
Nick Pickering vào

1
innerHTML là một phương pháp tiện lợi do Microsoft phát minh. Sau đó nó đã được sao chép vào các trình duyệt khác, nhưng vì a) nó không phải là tiêu chuẩn và b), bạn không thể có html ở một tùy chọn có là hoàn toàn không cần phải nhầm lẫn vấn đề khi một tùy chọn có .Value và .text
mplungjan

innerHTMLmặc dù rất tiện lợi ... Tôi sẵn sàng hy sinh tất cả các tiêu chuẩn và sự đơn giản cho điều đó. : P
Nick Pickering,

1
Cá nhân tôi sử dụng .text () với jQuery và .innerHTML với JS thuần túy và giúp tôi tránh những sai lầm khi trộn các khung công tác, chỉ theo thói quen. Tôi biết innerHTML hoạt động trên tất cả các trình duyệt và điều đó khiến tôi hài lòng :) ồ và tôi đã chỉ định cả hai tham số hàm để OP có thể liên quan dễ dàng hơn với giải pháp của tôi, không có lý do nào khác.
ericosg
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.