Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择框中选项的最正确方式_Javascript_Jquery_Forms_Select - Fatal编程技术网

Javascript 选择框中选项的最正确方式

Javascript 选择框中选项的最正确方式,javascript,jquery,forms,select,Javascript,Jquery,Forms,Select,我知道有多种方法可以使用jQuery从数据库中选择特定选项: $select.valsomeValue $option.attrselected,selected $select[0]。selectedIndex=1 假设你有你希望被选择的选项的索引和它的值,那么从上面看,最正确的方法是什么,或者以其他方式选择它 最正确的说法是: 最佳做法(如有) 将正确设置该值,以便与表单一起提交,并且可以使用上述任何方法检索该值 我选择一种方法而不是其他方法的任何其他原因 最常用的方法是$select.va

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

$select.valsomeValue $option.attrselected,selected $select[0]。selectedIndex=1 假设你有你希望被选择的选项的索引和它的值,那么从上面看,最正确的方法是什么,或者以其他方式选择它

最正确的说法是:

最佳做法(如有) 将正确设置该值,以便与表单一起提交,并且可以使用上述任何方法检索该值 我选择一种方法而不是其他方法的任何其他原因 最常用的方法是$select.valsomeValue,这是文档中用于设置任何输入值的官方方法,因此它将是最优化的方法,并且会影响性能区域

对于2,是的,它满足了这一点,对于3…它很短,仍然使你的意图非常明确


也就是说,如果要设置数千个select元素,最快的方法是$select[0]。selectedIndex=1路由…您无法获得比本机DOM属性更快的速度。但当设置一的值时,除非它有很多项目,否则在这种情况下,再次使用。selectedIndex速度应该在三者中的任何一个之间都没有关系。

正如Nick Craver所提到的,这些都会起作用,这实际上取决于上下文,哪一个最适合您的需要

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

var elem = document.getElementById('myselectid');
elem.options[1].value = 'some value'
但是,这样做会失去jquery的好处

例如,如果您需要基于一个模式进行许多更改,那么您可以使用jquery来帮助进行更改,这将减少您需要编写的未测试代码的数量。要查看您可以执行的模式列表,请查看以下内容:

因此,在任何情况下都没有最好的方法,这就是为什么有这么多方法可以在选择元素中设置选项的原因,但是,如果您给出一个用户故事,说明您在哪里这样做,那么可以解释一个特定的最佳实践

$select.valsomeValue

这很好,在通常的情况下,它是一个非多重选择,并且没有两个具有相同值的不同s。如果是这样的话,我会选择这个,作为最具可读性的选项

$select[0]。selectedIndex=1

这更直接,所以速度稍微快一点,对于有多个相同值的选项的情况,这是必须明确的

如果您可能有多选功能,则必须分别获取/设置每个选项的可选择性:

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

$option.attrselected,selected

通常不是最好的方法。attr的问题是,访问DOM属性和HTML属性就像它们是同一件事一样,试图向您隐藏它们之间的差异,这是一种令人讨厌的黑客行为。attr在这种情况下要做的是设置选定的DOM属性,它是一个布尔值。所以attr'selected',true更有意义;'“selected”作为字符串值也可以使用,但这只是因为所有非空字符串值在JavaScript中都是“truthy”

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

除了在IE上,由于默认值的实现存在缺陷,在其他浏览器中也存在一些情况,这些情况过于复杂和混乱,无法深入研究。带回家的建议:不要尝试从脚本设置选定的HTML属性,因为结果可能不可预测。使用DOM属性。输入的value/defaultValue和checkbox/radio的checked/defaultChecked也是如此