我知道有多种方法可以从 using jQuery 中选择特定选项:
$select.val("someValue")
$option.attr("selected", "selected")
$select[0].selectedIndex = 1
假设您同时拥有希望被选中的选项的索引及其值,那么选择它的最正确方法是什么(根据上述方法,或其他方法)?
“最正确”是指:
- 最佳实践,如果有的话
- 将正确设置值,以便它与表单一起提交,并且可以使用上述任何方法检索
- 我会选择一种方法而不是其他方法的任何其他原因
最佳答案
$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/