【问题标题】:why it displays the first option by default when adding a new option into select为什么在将新选项添加​​到选择时默认显示第一个选项
【发布时间】:2016-12-09 10:02:46
【问题描述】:

首先,select的值为null(没有选择选项)并且已经存在一些选项。但是,分别通过jquery和vue在select中添加了一个新选项后,它变成了第一个选项的值,为什么? (我们在 chrome 上测试了这个案例)

1.

<select>
    <option val="a">a</option>
    <option val="b">b</option>
<select>

此时:

$("select").val() == null
  1. 使用 jquery$("select").append("&lt;option value='hi'&gt;hi&lt;/option&gt;") 在 select 中添加一个选项

此时:

$("select").val() == "a"

【问题讨论】:

  • 显示你的代码...我们不像未来那样通灵:)
  • 我认为这是选择的默认行为。您可以使用value="0" 添加一个选项并测试$('select').val() == 0
  • @gonecoding 抱歉,现在已经添加了一些代码

标签: javascript jquery html


【解决方案1】:

默认情况下,HTML 倾向于选择一个选项。很可能您手动将 selectedIndex 设置为 -1select 在将元素附加到选择后被覆盖。您有以下两种选择之一:

  1. 检测您当前的selectedIndex 并在附加后恢复它。类似于var originalSelectedIndex = $("select").prop("selectedIndex"); $("select").append("&lt;option value='...'&gt;...&lt;/option&gt;"); $("select").prop("selectedIndex", originalSelectedIndex); 的内容。
  2. 创建一个带有空标签的初始元素,例如 &lt;option label=" "&gt;&lt;/option&gt;,这实际上会在提交时向您的服务器提交一个空值。

【讨论】:

  • 附加一个选项影响当前的选择。纯粹是因为没有默认选项:jsfiddle.net/TrueBlueAussie/5dr90fm7
  • 重点是原始帖子专门将selectedIndex设置为-1,因此通过附加选项导致&lt;select&gt;选择第一项。
  • 谁是原帖?不是这里的 OP(他们只有一个问题,也没有 selectedIndex = -1 的历史)。默认为null,任何不匹配值都将选择第一个条目(如果不存在默认条目)。正如您在第二部分中所述,也不需要标签。
  • 默认情况下,列出两个选项的 OP 代码不会返回 null。由于最初返回的值是null,因此发生的唯一方法是 OP 专门将selectedIndex 设置为-1。因此,通过附加一个选项它确实会影响当前的选择。
  • 我已经分叉了你的(Gone Coding)版本的代码来演示:jsfiddle.net/qhbcqhaf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 2019-12-12
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
相关资源
最近更新 更多