ChatGPT解决这个技术问题 Extra ChatGPT

使用 JavaScript 在下拉列表中获取选定值

如何使用 JavaScript 从下拉列表中获取选定的值?

我尝试了以下方法,但它们都返回选定的索引而不是值:

var e = document.getElementById("ddlViewBy"); function show(){ var as = document.forms[0].ddlViewBy.value; var strUser = e.options[e.selectedIndex].value; console.log(as, strUser); } e.onchange=显示;节目();

如果我不使用 selected 属性,如何获取选定的值?

D
DevLoverUmar

如果您有一个如下所示的选择元素:

<select id="ddlViewBy">
  <option value="1">test1</option>
  <option value="2" selected="selected">test2</option>
  <option value="3">test3</option>
</select>

运行此代码:

var e = document.getElementById("ddlViewBy");
var strUser = e.value;

将使 strUser 成为 2。如果您真正想要的是 test2,请执行以下操作:

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

这将使 strUser 成为 test2


var strUser = e.options[e.selectedIndex].value; 为什么不只是var strUser = e.value ?
@TheRedPea-也许是因为在编写此答案时,有可能(无论多么遥远)需要适应旧版本的 Netscape Navigator,因此使用了一种同样古老的方法来访问单个选择的值。但我只是猜测。 ;-)
我是这样使用的:var e = document.getElementById("ddlViewBy").value;
应该是 e.target.options[e.target.selectedIndex].text 不知道为什么这里的所有答案都错了..
@OZZIE - 查看 OP 问题中以 var e 开头的赋值语句。虽然 e(或 event)表示 eventObject 是惯例,但此处 OP 使用它来表示元素。
M
Machtyn

纯 JavaScript:

var e = document.getElementById("elementId");
var value = e.options[e.selectedIndex].value;
var text = e.options[e.selectedIndex].text;

jQuery:

$("#elementId :selected").text(); // The text content of the selected option
$("#elementId").val(); // The value of the selected option

AngularJS:(http://jsfiddle.net/qk5wwyct):

// HTML
<select ng-model="selectItem" ng-options="item as item.text for item in items">
</select>
<p>Text: {{selectItem.text}}</p>
<p>Value: {{selectItem.value}}</p>

// JavaScript
$scope.items = [{
  value: 'item_1_id',
  text: 'Item 1'
}, {
  value: 'item_2_id',
  text: 'Item 2'
}];

我一定是做错了什么,因为当我尝试这个时,我会在下拉菜单中取回每个选项的文本。
这确实以不同的方式对我有用。 $("#ddlViewBy :selected").val() 不是没有选中
element.options[e.selectedIndex].value 必须是 element.options[element.selectedIndex].value
仍然有用 - 感谢您写出变体/语言!现在,如果我只知道 Office JS API Dropdown 的等效项...
它在 jQuery 中也适用于我,只需放置 $("#elementId").val() 而无需提及 selected
G
Greg
var strUser = e.options[e.selectedIndex].value;

这是正确的,应该给你价值。是你要的文字吗?

var strUser = e.options[e.selectedIndex].text;

所以你对术语很清楚:

<select>
    <option value="hello">Hello World</option>
</select>

此选项具有:

索引 = 0

价值=你好

文本 = 你好世界


我认为 javascript 中的“.value”应该为我返回值,但只有“.text”会返回 asp.net 中的 .SelectedValue 返回的值。感谢您提供的示例!
是的 - 使选项的价值与它的价值相同。更简单 - 上面的人需要编写更多代码来弥补他最初的模糊性。
应该是 e.target.options[e.target.selectedIndex].text 不知道为什么这里的所有答案都错了..
C
Code Spy

以下代码展示了与使用 JavaScript 从输入/选择字段中获取/放置值相关的各种示例。

Source Link

工作Javascript & jQuery Demo

https://i.stack.imgur.com/8LJas.jpg

https://i.stack.imgur.com/GnfKD.jpg

 <select id="Ultra" onchange="run()">  <!--Call run() function-->
     <option value="0">Select</option>
     <option value="8">text1</option>
     <option value="5">text2</option>
     <option value="4">text3</option>
</select><br><br>
TextBox1<br>
<input type="text" id="srt" placeholder="get value on option select"><br>
TextBox2<br>
<input type="text" id="rtt"  placeholder="Write Something !" onkeyup="up()">

以下脚本获取所选选项的值并将其放入文本框 1

<script>
    function run() {
        document.getElementById("srt").value = document.getElementById("Ultra").value;
    }
</script>

以下脚本从文本框 2 中获取一个值并使用其值发出警报

<script>
    function up() {
        //if (document.getElementById("srt").value != "") {
            var dop = document.getElementById("srt").value;
        //}
        alert(dop);
    }
</script>

以下脚本正在从函数调用函数

<script>
    function up() {
        var dop = document.getElementById("srt").value;
        pop(dop); // Calling function pop
    }

    function pop(val) {
        alert(val);
    }?
</script>

onchange=run(this.value)(this.text) 可能更有益。
B
Bucket
var selectedValue = document.getElementById("ddlViewBy").value;

这是最简单的解决方案,至少对于现代浏览器而言。另见W3Schools
P
Peter Mortensen

如果您曾经遇到过纯粹为 Internet Explorer 编写的代码,您可能会看到:

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

在 Firefox 等中运行上面的代码会给你一个“不是函数”的错误,因为 Internet Explorer 允许你使用 () 而不是 []:

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

正确的方法是使用方括号。


b
boateng
<select id="Ultra" onchange="alert(this.value)"> 
 <option value="0">Select</option>
 <option value="8">text1</option>
 <option value="5">text2</option>
 <option value="4">text3</option>
</select>

当您从元素内部访问它时,任何输入/表单字段都可以使用“this”关键字。这消除了在 dom 树中定位表单然后在表单中定位该元素的需要。


P
Peter Mortensen

有两种方法可以使用 JavaScript 或 jQuery 完成此操作。

JavaScript:

var getValue = document.getElementById('ddlViewBy').selectedOptions[0].value;

alert (getValue); // This will output the value selected.

或者

var ddlViewBy = document.getElementById('ddlViewBy');

var value = ddlViewBy.options[ddlViewBy.selectedIndex].value;

var text = ddlViewBy.options[ddlViewBy.selectedIndex].text;

alert (value); // This will output the value selected

alert (text); // This will output the text of the value selected

jQuery:

$("#ddlViewBy:selected").text(); // Text of the selected value

$("#ddlViewBy").val(); // Outputs the value of the ID in 'ddlViewBy'

工作得很好。非常感谢。
N
Nandula Perera

初学者可能希望从带有 NAME 属性而不是 ID 属性的选择中访问值。我们知道所有表单元素都需要名称,甚至在它们获得 id 之前。

因此,我添加了 getElementsByName() 解决方案,仅供新开发人员查看。

注意。表单元素的名称必须是唯一的,这样您的表单才能在发布后使用,但 DOM 可以允许多个元素共享一个名称。因此,如果可以,请考虑向表单添加 ID,或者使用表单元素名称 my_nth_select_named_xmy_nth_text_input_named_y 明确。

使用 getElementsByName 的示例:

var e = document.getElementsByName("my_select_with_name_ddlViewBy")[0];
var strUser = e.options[e.selectedIndex].value;

如果 my_select_with_name_ddlViewBy 是类似 my_select_with_name_ddlViewBy[] 的数组,则不起作用
P
Peter Mortensen

只需使用

$('#SelectBoxId option:selected').text();获取列出的文本

$('#SelectBoxId').val();用于获取选定的索引值


这使用 jQuery,它不回答 OP 的问题。
J
John Codeos

我不知道我是不是没有正确回答问题的人,但这对我有用:在您的 HTML 中使用 onchange() 事件,例如。

<select id="numberToSelect" onchange="selectNum()">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
</select>

//javascript

function selectNum(){
    var strUser = document.getElementById("numberToSelect").value;
}

这将为您提供每次点击选择下拉列表中的任何值


F
Félix Adriyel Gagnon-Grenier

使用 jQuery:

$('select').val();

P
Peter Mortensen

由于可能性、代码的直观性以及 idname 的使用,之前的答案仍有改进的空间。可以读取所选选项的三个数据——它的索引号、它的值和它的文本。这个简单的跨浏览器代码完成了所有三个操作:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Demo GetSelectOptionData</title>
</head>
<body>
    <form name="demoForm">
        <select name="demoSelect" onchange="showData()">
            <option value="zilch">Select:</option>
            <option value="A">Option 1</option>
            <option value="B">Option 2</option>
            <option value="C">Option 3</option>
        </select>
    </form>

    <p id="firstP">&nbsp;</p>
    <p id="secondP">&nbsp;</p>
    <p id="thirdP">&nbsp;</p>

    <script>
    function showData() {
        var theSelect = demoForm.demoSelect;
        var firstP = document.getElementById('firstP');
        var secondP = document.getElementById('secondP');
        var thirdP = document.getElementById('thirdP');
        firstP.innerHTML = ('This option\'s index number is: ' + theSelect.selectedIndex + ' (Javascript index numbers start at 0)');
        secondP.innerHTML = ('Its value is: ' + theSelect[theSelect.selectedIndex].value);
        thirdP.innerHTML = ('Its text is: ' + theSelect[theSelect.selectedIndex].text);
    }
     </script>
</body>
</html>

现场演示:http://jsbin.com/jiwena/1/edit?html,output

id 应用于化妆。出于功能形式的目的,name 仍然有效,在 HTML5 中也是如此,并且仍应使用。最后,请注意在某些地方使用方括号与圆括号。如前所述,只有(旧版本的)Internet Explorer 将接受所有地方的圆形。


P
Peter Mortensen

另一种解决方案是:

document.getElementById('elementId').selectedOptions[0].value

R
Rounin - Standing with Ukraine

您可以使用 querySelector

例如

var myElement = document.getElementById('ddlViewBy');

var myValue = myElement.querySelector('[selected]').value;

C
Clairton Luz

最简单的方法是:

var value = document.getElementById("selectId").value;

他想要的不是值,而是选择框的显示文本
我认为这是大多数人正在寻找的实际答案。
好答案!这很有用
A
Ani Menon

它如何工作的运行示例:

var e = document.getElementById("ddlViewBy"); var val1 = e.options[e.selectedIndex].value; var txt = e.options[e.selectedIndex].text; document.write("
选择的选项值:"+ val1); document.write("
选中的选项文本:"+ txt);


P
Peter Mortensen

这是一段 JavaScript 代码行:

var x = document.form1.list.value;

假设下拉菜单名为列表 name="list" 并包含在具有名称属性 name="form1" 的表单中。


OP 说这对他们不起作用:“我尝试了下面的方法,但它们都返回选定的索引而不是值:var as = document.form1.ddlViewBy.value;...”
P
Pal Singh

您应该使用 querySelector 来实现这一点。这也标准化了从表单元素中获取价值的方式。

var dropDownValue = document.querySelector('#ddlViewBy').value;

小提琴:https://jsfiddle.net/3t80pubr/


e
emptywalls

event.target.value 在 onChange 回调中为我做了诀窍。


K
Kamil Kiełczewski

尝试

ddlViewBy.value                      // value

ddlViewBy.selectedOptions[0].text    // label

控制台.log(ddlViewBy.value); console.log(ddlViewBy.selectedOptions[0].text);