jQuery从下拉列表中获取选定的选项


1127

通常,我使用它$("#id").val()来返回所选选项的值,但这一次它不起作用。所选标签的IDaioConceptName

HTML代码

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

2
您能显示元素的标记吗#aioConceptName
豪尔赫(Jorge)

2
这很奇怪,因为可以在此示例jsfiddle.net/pAtVP上运行,您确定它会在您的环境中触发该事件吗?
豪尔赫2012年


11
我想了想,但是.val()除非您value在这些<option>s 上设置了属性,否则不会起作用,对吗?
2013年

8
jQuery的最新版本(已通过1.9.1测试)对此标记没有问题。对于上面的示例,$("#aioConceptName").val()返回choose io
Salman A

Answers:


1844

对于下拉选项,您可能想要这样的东西:

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

之所以val()不能解决问题,是因为单击选项不会更改下拉菜单的值,它只是将:selected属性添加到作为下拉菜单的项的所选选项中。


41
嗯,好的,您已经使用HTML更新了问题。现在,此答案无关紧要。事实上,.val()应该适合您的情况-您在其他地方必须有一个错误。
艾略特·邦纳维尔

13
对于val()为什么不能用var conceptVal = $("#aioConceptName option").filter(":selected").val();
测试人员

61
一个简单的var conceptVal = $("#aioConceptName option:selected").val()怎么样?
KlemenTušar,

5
我仍然发现这有助于在以前从中获得下拉菜单的选择中找到选定的选项-例如,var mySelect = $('#mySelect'); / * ...更多代码会发生... * / var selectedText = mySelect.find(':selected').text();
Charles Wood

18
实际上.val()对他不起作用的原因是因为他实际上没有给选项赋予值,这就是为什么他必须使用您的方法来检索所选文本的原因,因此另一种解决方法是更改将<option> choose io </ option>改为<option value ='choose io'> choose io </ option>为什么对他不起作用。
Jordan LaPrise

342

设置每个选项的值

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

$('#aioConceptName').val()无效,因为.val()返回value属性。为了使其正常工作,value必须在每个上设置属性<option>

现在,您可以打电话$('#aioConceptName').val()代替:selected别人建议的所有伏都教。


11
警告:如果未选择任何选项,则$('#aioConceptName').val()返回null /“ undefined”
gordon

这向我保证了$('#myselect')。val()是正确的,我只是愚蠢地忘记了为select提供一个ID!
zzapper 2014年

4
我的选择选项之一是特殊prompt选项<option>Please select an option</option>。就我而言,添加空白值属性不是问题,<option value="">Please...</option>但我认为在某些情况下不具有值属性是有意义的。但是+1是因为您的伏都教措辞让我微笑。
西里尔·杜尚·多丽丝

是不是val()选择value而不是文本option?即选择1而不是roma
死锁

4
@deathlock就是重点.val()。如果您要操纵/使用文本,请使用$(":selected).text()或将值和文本设置为相同。
雅各布·瓦伦塔

162

我偶然发现了这个问题,并开发了一个更为简洁的Elliot BOnneville答案:

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

或一般而言:

$('#id :pseudoclass')

这样可以节省您额外的jQuery调用,一次即可选择所有内容,而且更加清晰(我认为)。


1
@JohnConde关于Meta的公认答案与您不同意:meta.stackexchange.com/questions/87678/…。我认为,埃德(Ed)给出了很好的答案,并提供了一些额外的参考。
itsbruce 2012年

他们可以允许它,但是它仍然是一种不好的资源
John Conde

1
删除了w3schools链接,这不是绝对必要的,并且Google搜索“ jQuery pseduo类”可提供大量信息。
Ed Orsi 2012年

@EdOrsi:虽然它节省了一个额外的jQuery调用,但是却阻止了利用本机DOM querySelectorAll()方法提供的性能提升(请参阅jQuery docs)。因此,它应该比Eliot的解决方案慢。
亚历山大·阿巴库莫夫

我可能更喜欢使用.find(':selected')as,因为它允许您从附加到事件的回调中调用它……例如$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest,

58

尝试此物有所值...

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

或这个文本...

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

49

如果您处于事件上下文中,则在jQuery中,可以使用:来检索所选的option元素,
$(this).find('option:selected')如下所示:

$('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
});

编辑

PossessWithin所述,我的回答只是回答以下问题:如何选择选定的“选项”。

接下来,使用获取选项值option.val()


2
完美无瑕!只是不要忘记,您应该$(this).find('option:selected').val()在末尾添加以获取option元素的值或$(this).find('option:selected').text()获取文本。:)
迭戈·福特斯



16

读取选择的值(而不是文本):

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

如何禁用选择? 在这两种变体中,可以使用以下方法更改值:

一个

用户无法与下拉列表互动。而且他不知道还有其他选择。

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

用户可以在下拉菜单中看到这些选项,但所有选项均被禁用:

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

在这种情况下,$("#Status").val() 仅适用于小于的jQuery版本1.9.0。所有其他变体都可以使用。

如何更新禁用的选择?

从后面的代码中,您仍然可以更新选择的值。仅对用户禁用:

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

在某些情况下,您可能需要触发事件:

$("#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>

:)好的事情是:selected.. val()或text()在多个选择选项上无法正常工作,只有当像map()这样产生数组时才这样做。
Ol Sen

10

您应该使用以下语法:

var value = $('#Id :selected').val();

因此,请尝试以下代码:

var values = $('#aioConceptName :selected').val();

您可以在Fiddle中进行测试:http//jsfiddle.net/PJT6r/9/

这篇文章中看到这个答案


9

使用jQuery,只需添加一个change事件并在该处理程序中获取选定的值或文本即可。

如果您需要选择的文本,请使用以下代码:

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

或者,如果您需要选择的值,请使用以下代码:

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

9

也将jQuery.val()函数用于选择元素:

.val()方法主要用于获取表单元素的值,例如输入,选择和文本区域。对于select元素,null如果没有选择任何选项,则返回;如果存在至少一个,则返回包含每个选择的选项的值的数组,并且由于multiple存在该属性,因此可以选择更多的值。

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

对于任何发现最佳答案的人都行不通。

尝试使用:

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

在最近的项目中为我工作,因此值得一看。


7

只是这应该工作:

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

6

直截了当,非常简单:

您的下拉菜单

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

jQuery代码以获取所选值

$('#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

您可以尝试通过以下方式对其进行调试:

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

4

为了获得所选标签的价值

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

如果要获取文本,请使用以下代码:

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

例如:

<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

如果您想获取'value'属性而不是文本节点,那么它将为您工作:

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

这只是部分解决方案-还必须为每个选项设置值-雅各布·瓦莱塔(Jacob Valetta)的答案已经涵盖了这一点
戴维

2

尝试这个

$(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);

想象一下DDL是一个带有索引的数组,您正在选择一个索引。选择要与JS一起设置的对象。




1

要获取具有相同类名的选择,可以执行此操作,以检查是否选择了选择选项。

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

1

我遇到了同样的问题,并且弄清楚了为什么它不能在我的情况下工作
html页面被分为不同的html片段,我发现我还有另一个输入字段带有相同的ID select,导致val()始终为空
我希望这可以为有类似问题的任何人节省一天的时间。


确实,这使我感到困惑。我自己在数据目标中使用qty字段,在id本身中使用.. qty_field。始终检查基础知识两次或更多次。
cdsaenz

1

要使用$(“#id”)。val,应在选项中添加一个值,如下所示:

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

否则,您可以使用

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

希望对您有所帮助。


1

这是此问题的简单解决方案。

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

1
var selectedaioConceptName = $('#aioConceptName option:selected').val();比使用另一个find()更好
Sadee

0

在这种情况下,您最好的选择是使用jQuery的change方法来查找当前选定的值,如下所示:

$('#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

});

我更喜欢这种方法,因为您可以在给定的选择字段中为每个选定的选项执行功能。

希望有帮助!


0

通常,您不仅需要获取选定的值,还需要执行一些操作。那么,为什么不避免使用所有jQuery魔术,而只是将所选值作为参数传递给action调用呢?

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

0

您可以使用精确选择的选项进行选择:下面将给出innerText

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

虽然下面将为您带来价值。

$("select#aioConceptName > option:selected").val()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.