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

时间:2010-08-23 00:40:25

标签: javascript jquery forms select

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

  1. $select.val("someValue")
  2. $option.attr("selected", "selected")
  3. $select[0].selectedIndex = 1
  4. 假设你同时拥有你想要选择的选项的索引及其值,那么最合适的方法是什么(从上面或其他方面)选择它?

    “最正确”,我的意思是:

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

3 个答案:

答案 0 :(得分:3)

最常用的方式是$select.val("someValue"),这是文档中用于设置任何输入值的官方方法,因此它将是最优化的方法,并且它们会影响性能区域。

对于#2,是的,它满足了这个,对于#3 ......它很短并且仍然使你的意图非常明确。

话虽如此,最快的方式,如果你设置了数千个选择元素是$select[0].selectedIndex = 1路由......你不能比原生DOM属性更快。当设置值为1时(除非它有很多项目,在这种情况下再次使用.selectedIndex),速度应该是到目前为止在三者之间无关紧要。

答案 1 :(得分:3)

  

$ select.val( “someValue中”)

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

  

$ select [0] .selectedIndex = 1

这更直接,更快,并且对于具有相同值的多个选项的情况,必须明确无误。

如果您有multiple - 选择,则必须单独获取/设置每个选项的选择性:

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

然而:

  

$ option.attr(“已选中”,“已选中”)

通常不是最好的方法。 attr()的问题是,访问DOM属性和HTML属性是一个讨厌的黑客,好像它们是同一个东西,试图隐藏与你的区别。在这种情况下attr()将执行的操作是设置selected DOM 属性,这是一个布尔值。所以attr('selected', true)会更有意义; 'selected'作为字符串值也可以,但只是因为JavaScript中的所有非空字符串值都是“真实的”。

如果您实际在此处设置HTML selected属性,则不会对选项的选择性产生影响,因为selected 属性实际上映射到defaultSelected属性而非selectedselected属性反映用户更改的运行时表单内容; defaultSelected反映了包含初始选择状态的文档中的实际属性。

(除了在IE上,由于其默认值的实现存在错误,并且在某些情况下在其他浏览器中也太复杂且容易引起混淆。带回家的建议:不要尝试设置{{ 1}}来自脚本的HTML属性,因为结果可能无法预测。使用DOM属性。对于输入selected / valuedefaultValue / {{1}也是如此复选框/收音机。)

答案 2 :(得分:1)

正如尼克·克拉弗所提到的,任何这些都可行,这实际上取决于哪种情况最符合您的需求。

就个人而言,如果我需要速度,我只需使用类似的东西(未测试,只是一个例子):

var elem = document.getElementById('myselectid');
elem.options[1].value = 'some value'

但是,你这样做会失去jquery的好处。

例如,如果您需要根据模式进行许多更改,那么您可以使用jquery来帮助解决这个问题,这将减少您需要编写的未经测试的代码量。有了一个很好的模式列表,你可以看看:http://www.myphpetc.com/2009/03/jquery-select-elements-tips-and-tricks.html

所以,没有一种最好的方法在任何情况下都是最好的,这就是为什么有很多方法可以在option元素中设置select,但是,如果你给用户你正在做这个故事,然后可以解释一个特定的最佳实践。