Javascript Safari中的Bug:options.length=0;在Safari 4中未按预期工作

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

这不是一个真正的问题,而是一个答案,可以让其他人省去追踪这个讨厌的bug的麻烦。我花了好几个小时才弄明白

使用
options.length=0时
要在safari中重置select元素的所有选项,根据是否打开Web Inspector,您可能会得到不同的结果。 如果web检查器处于打开状态,则使用
myElement.options.length=0options.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中运行良好。