ChatGPT解决这个技术问题 Extra ChatGPT

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

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

html代码

<label for="name">Name</label>
<input type="text" name="name" id="name" />

<label for="aioConceptName">AIO Concept Name</label>
<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>
你能显示元素 #aioConceptName 的标记吗
这很奇怪,因为在此示例 jsfiddle.net/pAtVP 上有效,您确定它在您的环境中触发的事件吗?
一个迟到的想法,但 .val() 除非您在这些 <option> 上设置 value 属性,否则将无法工作,对吧?
最新版本的 jQuery(用 1.9.1 测试)在这个标记上没有问题。对于上面的示例,$("#aioConceptName").val() 返回 choose io

E
Elliot Bonneville

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

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

val() 没有起作用的原因是因为单击选项不会更改下拉列表的值 - 它只是将 :selected 属性添加到作为 子项的选定选项的下拉菜单。


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

设置每个选项的值

<label for="aioConceptName">AIO Concept Name</label>
<select id="aioConceptName">
    <option value="0">choose io</option>
    <option value="1">roma</option>
    <option value="2">totti</option>
</select>

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

现在您可以调用 $('#aioConceptName').val() 而不是其他人建议的所有这些 :selected voodoo。


警告:如果未选择任何选项,$('#aioConceptName').val() 将返回 null/"undefined"
这向我保证 $('#myselect').val() 是正确的,我只是愚蠢地忘记给选择一个 ID!
我选择的选项之一是特殊的 prompt 选项 <option>Please select an option</option>。就我而言,添加空白值属性 <option value="">Please...</option> 不是问题,但我相信在某些情况下没有值属性是有意义的。但是 +1 因为你的伏都教措辞让我微笑。
val() 不是选择value 而不是option 内的文字吗?即它选择1 而不是roma
@deathlock 这就是 .val() 的重点。如果您希望操作/使用文本,请使用 $(":selected).text() 或将值和文本设置为相同。
C
Cᴏʀʏ

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

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

或一般来说:

$('#id :pseudoclass')

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


@JohnConde Meta 上接受的答案不同意您的观点: meta.stackexchange.com/questions/87678/… 。在我看来,Ed 给出了一个很好的答案,只是提供了一些额外的参考。
他们可以允许,但它仍然是一个糟糕的资源
删除了 w3schools 链接,这不是绝对必要的,谷歌搜索“jQuery pseduo classes”提供了大量信息。
@EdOrsi:虽然它节省了额外的 jQuery 调用,但它阻止了利用本机 DOM querySelectorAll() 方法提供的性能提升(请参阅 jQuery docs)。因此,它应该比 Eliot's solution 慢。
我可能更喜欢使用 .find(':selected'),因为它允许您从附加到事件的回调中调用它......比如 $('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
V
Vladimir Djuricic

试试这个价值...

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

或者这个作为文本......

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

使用多选下拉菜单时,它只会获得第一个值
@ThimiraPathirana 在这种情况下,您只需从查询中删除“选项”字样。
C
Community

如果您在事件上下文中,在 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() 以获取文本。 :)
C
Community

您是否考虑过使用普通的旧 javascript?

var box = document.getElementById('aioConceptName');

conceptName = box.options[box.selectedIndex].text;

另请参阅Getting an option text/value with JavaScript


˗1 没有足够的jQuery
w
wild_nothing
$('#aioConceptName option:selected').val();

这是最好的答案,希望有一种方法可以在堆栈溢出时请求在顶部显示正确的答案。
k
kupendra

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

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

使用多选下拉菜单时,它只会获得第一个值
E
Eric

为了获得良好的实践,您需要使用 val() 来获取所选选项的值,而不是 text()

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

您可以使用

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

或者

   $("#aioConceptName :selected").val();

D
D.L.MAN

你应该使用这个语法:

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

所以试试这个代码:

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

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

this post 中查看此答案


N
NcXNaV

使用 JQuery:

如果要获取选中的选项文本,可以使用$(select element).text()。 var text = $('#aioConceptName option:selected').text();如果要获取选定的选项值,可以使用 $(select element).val()。 var val = $('#aioConceptName option:selected').val();确保在

使用此 HTML 代码示例,假设选择了最后一个选项:

var text 会给你 totti(text) var val 会给你 totti(value)

$(document).on('change','#aioConceptName' ,function(){ var val = $('#aioConceptName option:selected').val(); var text = $('#aioConceptName option:selected' ).text(); $('.result').text("选择值 = " + val); $('.result').append("
选择文本 = " + text); }) <脚本 src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">


添加片段作为概念证明
s
sanman

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

如果您需要选定的文本,请使用此代码:

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

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

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

S
StarsSky

对于任何发现最佳答案的人都不起作用。

尝试使用:

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

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


S
Salman A

也对选择元素使用 jQuery.val() 函数:

.val() 方法主要用于获取输入、选择和文本区域等表单元素的值。在 select 元素的情况下,当没有选择任何选项时它返回 null,当至少有一个选项时,它返回一个包含每个选定选项的值的数组,并且可以选择更多,因为存在 multiple 属性。

$(function() { $("#aioConceptName").on("change", function() { $("#debug").text($("#aioConceptName").val()); })。触发器(“改变”);});


J
Juan J

直截了当而且很简单:

您的下拉菜单

<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.
});

m
mamal

要获取所选标签的值:

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

D
DaFois

您可以尝试以这种方式调试它:

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

R
Rashed Hasan

我希望这也有助于更好地理解并帮助在下面尝试这个,

$('select[id="aioConceptName[]"] option:selected').each(function(key,value){
   options2[$(this).val()] = $(this).text();
   console.log(JSON.stringify(options2));
});

要了解更多详情,请http://www.drtuts.com/get-value-multi-select-dropdown-without-value-attribute-using-jquery/


D
Drodarious

如果你想获取 'value' 属性而不是文本节点,这对你有用:

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

这只是部分解决方案-还需要为每个选项设置值-雅各布瓦莱塔的回答已经涵盖了这一点
S
Sanjaya

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

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

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

试试这个

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

S
Satista
$('nameofDropDownList').prop('selectedIndex', whateverNumberasInt);

将 DDL 想象成一个带有索引的数组,您正在选择一个索引。选择你想用你的 JS 设置的那个。


A
Ankur Soni

您可以使用 $("#drpList").val();


你是对的;然而,他与文字有关,问题是错误的。
J
Jan Bludau

要获取具有相同类 = 名称的选择,您可以这样做,以检查是否选择了选择选项。

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

H
Hasnaa Ibraheem

我遇到了同样的问题,但我弄清楚了为什么它不适用于我的案例
html 页面被分成不同的 html 片段,我发现我有另一个带有 select 的相同 ID 的输入字段,其中导致 val() 始终为空
我希望这可以为遇到类似问题的任何人节省一天的时间。


确实,这让我意识到了自己的问题。我自己在数据目标中使用 qty-field,在 id 本身中使用.. qty_field。始终检查基础知识两次或更多次。
K
Kamil Kiełczewski

尝试

aioConceptName.selectedOptions[0].value

let val = aioConceptName.selectedOptions[0].value console.log('选定值:',val);


这个 vanilla js,专门针对 jQuery 解决方案提出的问题。
O
Oleg Lysyakov

只有一种正确的方法可以找到选定的选项 - 通过 option value 属性。所以采取简单的代码:

//find selected option
$select = $("#mySelect");
$selectedOption = $select.find( "option[value=" + $select.val() + "]" );
//get selected option text
console.log( $selectedOption.text() );

因此,如果您有这样的列表:

<select id="#mySelect" >
  <option value="value1" >First option</option>
  <option value="value2" >Second option</option>
  <option value="value3" selected >Third option</option>
</select>

如果您对 option 使用 selected 属性,那么 find(":selected") 将给出不正确的结果,因为 selected 属性将永远停留在 option,即使用户选择了另一个选项。

即使用户选择第一个或第二个选项,$("select option:selected") 的结果也会给出两个元素!所以 $("select :selected").text() 会给出类似“第一个选项第三个选项”的结果

所以使用 value 属性选择器,不要忘记为所有选项设置 value 属性!


W
Werner ZeBeard Bessinger

在这种情况下,您最好的选择可能是使用 jQuery's change method 来查找当前选择的值,如下所示:

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

});

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

希望有帮助!