javascript - 在 <select> 框中选择选项的最正确方法

标签 javascript jquery forms select

我知道有多种方法可以从 using jQuery 中选择特定选项:

  1. $select.val("someValue")
  2. $option.attr("selected", "selected")
  3. $select[0].selectedIndex = 1

假设您同时拥有希望被选中的选项的索引及其值,那么选择它的最正确方法是什么(根据上述方法,或其他方法)?

“最正确”是指:

  1. 最佳实践,如果有的话
  2. 将正确设置值,以便它与表单一起提交,并且可以使用上述任何方法检索
  3. 我会选择一种方法而不是其他方法的任何其他原因

最佳答案

$select.val("someValue")

这很好,在常见情况下,它是一个非 multiple 选择,并且您没有两个不同的 <option> s 具有相同的 value 。如果是这样的话,我会选择这个,因为它是最易读的选项。

$select[0].selectedIndex = 1

这更直接,所以稍微快一些,并且在您有多个具有相同值的选项的情况下必须明确。

如果您可能有一个 multiple -select,您必须分别获取/设置每个选项的选择度:

$select[0].options[1].selected= true;

但是:

$option.attr("selected", "selected")

通常不是最好的方法。 attr() 的问题是访问 DOM 属性和 HTML 属性就好像它们是同一事物一样,试图向您隐藏差异,这是一种令人讨厌的黑客攻击。在这种情况下,attr() 将执行的操作是设置 selected DOM 属性,这是一个 bool 值。所以 attr('selected', true) 会更有意义; 'selected' 作为字符串值也有效,但这只是因为所有非空字符串值在 JavaScript 中都是“真实的”。

如果您实际上在这里设置了 HTML selected 属性,它不会影响选项的选择,因为 selected 属性 实际上映射到 defaultSelected 属性而不是 selected ! selected 属性反射(reflect)了用户更改的运行时表单内容; defaultSelected 反射(reflect)文档中包含初始选择状态的实际属性。

(除了在 IE 上,由于其默认值实现中的错误,以及在其他浏览器中,在某些情况下太复杂和令人困惑而无法进入。带回家的建议:不要尝试设置 selected HTML来自脚本的属性,因为结果可能无法预测。使用 DOM 属性。输入的 value/defaultValue 和复选框/单选框的 checked/defaultChecked 也是如此。)

关于javascript - 在 <select> 框中选择选项的最正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544086/

相关文章:

javascript - 为什么这个 HTML 表单允许我增加表单中的数字,而不是减少它们?

javascript - 如何在表单中提交值后显示框

javascript - 如何在两个html页面之间做过渡效果

java - html 使用 switch() JS 以相同的形式绘制提交表单

javascript - Ajax 请求 : Refused to set unsafe header

javascript - jquery 选项卡显示 :none hiding all inner divs

javascript - Jasmine.js 测试 - 监视 window.open

javascript - 通过 jquery 使用外部源更改 SVG 的颜色

javascript - 为什么我的滑动内容一次之后就一直继续下去?

php - 将数据从表单发布到电子邮件