Safari中的错误:options.length = 0;在Safari 4中没有按预期工作

时间:2010-03-12 11:16:59

标签: javascript safari google-chrome webkit

这不是一个真正的问题,而是一个答案,可以帮助其他人节省跟踪这个令人讨厌的错误的麻烦。我浪费了几个小时才发现这一点。

使用options.length = 0;重置safari中select元素的所有选项时,您可以获得混合结果,具体取决于您是否打开Web Inspector。 如果Web检查器已打开,则使用myElement.options.length = 0;,在查询options.length()之后,您可能会返回1而不是0(预期)但仅当Web Inspector处于打开状态时(通常情况下是这种情况)像这样调试问题)。

解决方法:

关闭Web Inspector或两次调用myElement.options.length = 0;

myElement.options.length = 0;
myElement.options.length = 0;

测试用例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title>Testcase</title>
<script type="text/javascript" language="javascript" charset="utf-8">
function test(el){
 var el = document.getElementById("sel");
 alert("Before calling options.length=" + el.options.length);
 el.options.length = 0;
 alert("After calling options.length=" + el.options.length);
}
</script>
</head>
<body onLoad="test();">
<p>
Make note of the numbers displayed in the Alert Dialog, then open Web inspector, reload this page and compare the numbers.
</p>

<select id="sel" multiple>
 <option label="a----------" value="a"></option>
 <option label="b----------" value="b"></option>
 <option label="c----------" value="c"></option>
</select>
</body>

</html>

3 个答案:

答案 0 :(得分:3)

关闭Web Inspector或调用myElement.options.length = 0;两次这样:

myElement.options.length = 0;
myElement.options.length = 0;

答案 1 :(得分:1)

无法使用当前的dev-channel版本重现该版本。 5.0.375.6

答案 2 :(得分:0)

尝试:

myElement.options.splice(0, myElement.options.length);

(第一个参数是起始索引,第二个参数表示要删除的元素数量)