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

IT技术 javascript html jquery drop-down-menu
2021-02-01 15:20:03

通常我$("#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>
6个回答

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

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

之所以val()不起作用,是因为单击一个选项不会更改下拉列表的值——它只是将:selected属性添加作为下拉列表项的选定选项

实际上 .val() 对他不起作用的原因是因为他实际上并没有给他的选项一个值,这就是为什么他必须使用您的方法来检索所选文本,因此另一个解决方法是更改<option>choose io</option> 到 <option value='choose io'>choose io</option> 虽然您的解决方案可能更快、更实用,但我想我还是要说明这一点,以便他更好地理解为什么它对他不起作用。
2021-03-11 15:20:03
我仍然发现这有助于在我之前获得下拉列表的选择中找到所选选项 - 例如,var mySelect = $('#mySelect'); /* ...更多代码发生... */ var selectedText = mySelect.find(':selected').text();
2021-03-19 15:20:03
啊,好的,你已经用 HTML 更新了你的问题。这个答案现在无关紧要。事实上,.val()应该适用于您的情况 - 您必须在其他地方出错。
2021-03-31 15:20:03
更简单的var conceptVal = $("#aioConceptName option:selected").val()怎么样?
2021-04-06 15:20:03
对于val()为什么不能用var conceptVal = $("#aioConceptName option").filter(":selected").val();
2021-04-08 15:20:03

为每个选项设置值

<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其他人建议的所有这些巫术。

警告:如果未选择任何选项,则$('#aioConceptName').val()返回空/“未定义”
2021-03-14 15:20:03
@deathlock 这就是.val(). 如果您要操作/使用文本,请使用$(":selected).text()或设置值与文本相同。
2021-03-18 15:20:03
这让我确信 $('#myselect').val() 是正确的,我只是愚蠢地忘记给 select 一个 id!
2021-03-19 15:20:03
是不是val()选择了value而不是里面的文字option即它选择1而不是roma.
2021-03-23 15:20:03
我选择的选项之一是特殊prompt选项<option>Please select an option</option>就我而言,添加空白值属性不是问题,<option value="">Please...</option>但我相信在某些情况下没有值属性是有意义的。但是 +1 因为你的伏都教措辞让我微笑。
2021-03-25 15:20:03

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

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

或一般:

$('#id :pseudoclass')

这为您节省了额外的 jQuery 调用,一次性选择所有内容,并且更加清晰(我的意见)。

他们可以允许,但它仍然是一个糟糕的资源
2021-03-12 15:20:03
删除了 w3schools 链接,这不是绝对必要的,谷歌搜索“jQuery pseduo classes”提供了大量信息。
2021-03-12 15:20:03
我可能更喜欢使用.find(':selected')as then 它允许您从附加到事件的回调中调用它......就像$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
2021-03-18 15:20:03
@EdOrsi:虽然它节省了额外的 jQuery 调用,但它阻止利用本机 DOMquerySelectorAll()方法提供的性能提升(请参阅jQuery 文档)。所以,它应该比艾略特的解决方案
2021-03-20 15:20:03
@JohnConde的元上与不同意你接受的答案:meta.stackexchange.com/questions/87678/...在我看来,Ed 给出了很好的答案,只是提供了一些额外的参考。
2021-03-31 15:20:03

试试这个的value...

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

或者这对于文本...

$("select#id_of_select_element option").filter(":selected").text();
@ThimiraPathirana 在这种情况下,您只需从查询中删除“选项”字样即可。
2021-03-17 15:20:03
当使用多选下拉菜单时,它只获得第一个值
2021-04-08 15:20:03

如果您处于事件上下文中,则在 jQuery 中,您可以使用 : 检索所选选项元素,
$(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().

完美无瑕!只是不要忘记您应该$(this).find('option:selected').val()在末尾添加以获取选项元素的值,或$(this).find('option:selected').text()获取文本。:)
2021-04-08 15:20:03