Javascript Safari中的Bug:options.length=0;在Safari 4中未按预期工作
这不是一个真正的问题,而是一个答案,可以让其他人省去追踪这个讨厌的bug的麻烦。我花了好几个小时才弄明白 使用Javascript Safari中的Bug:options.length=0;在Safari 4中未按预期工作,javascript,safari,google-chrome,webkit,Javascript,Safari,Google Chrome,Webkit,这不是一个真正的问题,而是一个答案,可以让其他人省去追踪这个讨厌的bug的麻烦。我花了好几个小时才弄明白 使用options.length=0时要在safari中重置select元素的所有选项,根据是否打开Web Inspector,您可能会得到不同的结果。 如果web检查器处于打开状态,则使用myElement.options.length=0
options.length=0时
要在safari中重置select元素的所有选项,根据是否打开Web Inspector,您可能会得到不同的结果。
如果web检查器处于打开状态,则使用myElement.options.length=0在查询完options.length()
之后,您可能会返回1,而不是0(预期),但前提是Web检查器处于打开状态(这在调试类似问题时经常出现)
解决方法:
关闭Web检查器或调用myElement.options.length=0代码>两次这样:
myElement.options.length = 0;
myElement.options.length = 0;
myElement.options.length = 0;
myElement.options.length = 0;
测试用例:
测试向量
功能测试(el){
var el=document.getElementById(“sel”);
警报(“调用选项前.length=“+el.options.length”);
el.options.length=0;
警报(“调用options.length=“+el.options.length”)后;
}
记下警报对话框中显示的数字,然后打开Web inspector,重新加载此页面并比较数字。
关闭Web检查器或调用myElement.options.length=0;两次这样:
myElement.options.length = 0;
myElement.options.length = 0;
myElement.options.length = 0;
myElement.options.length = 0;
无法使用当前的开发人员频道版本复制该内容。5.0.375.6试试:
myElement.options.splice(0, myElement.options.length);
(第一个参数是起始索引,第二个参数表示要删除多少个元素)我不确定我是否会像这样强制数组长度为零,尤其是像“选项”这样语义纠结的数组
元素的属性。@Pointy:如果您没有完全清除select元素,则可以使用一行干净的代码删除多个选项
元素,并且比内部HTML
更有效。不管怎样,我认为使用它与使用innerHTML
相比没有什么问题。如果它能工作,我想没问题。对我来说,这似乎是“诱人的命运”,但我倾向于谨慎。(哦,我猜,正如这个问题所表明的,它不一定总是工作的……)它总是工作的,除非浏览器遇到一个非常奇怪的错误,在这种情况下,这个错误与它的JavaScript解释器无关。@Jeff:你为什么要添加google chrome作为标记?我不清楚两者之间的关系,我是说用铬。此外,它在基于最新源代码构建的WebKit中运行良好。