【问题标题】:jQuery and 'select' tagjQuery 和“选择”标签
【发布时间】:2011-10-22 03:38:12
【问题描述】:

我有一个<select> 标签,我需要选择所选选项的值。

<select id="foo">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
</select>

使用 jQuery,我尝试使用 val() 方法来做到这一点:

$('#foo').val();

问题是它总是返回1——所选选项的默认值!

为什么会这样?

【问题讨论】:

  • 你有没有其他 ID 为“foo”的元素?

标签: jquery select jquery-selectors option


【解决方案1】:

试试这个

$("#foo option:selected").val();

编辑:DEMO here

【讨论】:

  • 我认为我需要使用live()。当我有$('#foo').val()时如何使用它?
  • @daGervis。你必须使用 $("#foo option:selected").val();或 $("#foo :selected").val();而不是 $('#foo').val() 来获取选定的值
  • @daGrevis 在那个演示中使用live() 是完全没有必要的。您可以简单地使用click 处理程序。查看我的更新jsfiddle.net/54DmJ/7
【解决方案2】:

&lt;select&gt; 元素不包含具有selected 属性的选项时,它默认选择第一个选项。

如果您更改选择并运行val(),您将获得不同的值。

试试这个并告诉我它是否在每次更改时仍然为您提供相同的值

$('#foo').change(function() {
    console.log($(this).val());
});

【讨论】:

  • 这就是问题所在!即使用户选择了其他选项,它也始终选择第一个选项。
  • @daGrevis 我无法复制它。我已经更新了我的答案,供你尝试。
  • 它返回了带有所有选项的select 标记和正确的value 属性。有什么帮助吗?
  • @daGrevis 什么?它不应该“返回”任何东西。当您选择不同的选择选项时,打开控制台并观察输出
  • 这里也按预期工作。听起来 OP 遇到了 PEBKAC 问题。
【解决方案3】:

试试这个:

 $('#foo :selected').val();

检查一下:

$('#foo').change(function() {
    console.log($('#foo :selected').val());
}).change(); // this change will fire for first time and give the value `1`

【讨论】:

  • 它给了我同样的结果。任何时候都只有第一个选项。
  • 这是不必要的,甚至记录在API
【解决方案4】:
$("select option:selected").each(function () {
    $(this).val();
});

【讨论】:

    【解决方案5】:

    如果您在选择器中使用多个具有 id 属性的 DOM 元素,也会发生这种情况。

    jQuery 会将事件正确绑定到所有元素,但在请求其值时仅使用 DOM 中的第一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      相关资源
      最近更新 更多