Ошибка в Safari: options.length = 0; не работает должным образом в Safari 4 - PullRequest
3 голосов
/ 12 марта 2010

Это не реальный вопрос, а скорее ответ, чтобы избавить некоторых других от необходимости выслеживать эту неприятную ошибку. Я потратил впустую часы, чтобы выяснить это.

При использовании options.length = 0; для сброса всех параметров элемента select в safari вы можете получить смешанные результаты в зависимости от того, открыт ли у вас веб-инспектор или нет. Если веб-инспектор открыт, вы используете myElement.options.length = 0;, а после этого запроса options.length() вы можете вернуть 1 вместо 0 (ожидаемый), но только если веб-инспектор открыт (что часто бывает при устранении неполадок, подобных этой ).

Обход:

Закройте веб-инспектор или дважды наберите myElement.options.length = 0;, например:

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

TestCase:

<!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 ]

3 голосов
/ 12 марта 2010

Закройте веб-инспектор или вызовите myElement.options.length = 0; в два раза так:

myElement.options.length = 0;
myElement.options.length = 0;
1 голос
/ 17 апреля 2010

Невозможно воспроизвести это в текущей версии dev-channel. 5.0.375.6

0 голосов
/ 21 мая 2010

Попробуйте:

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

(первый параметр - начальный индекс, второй параметр указывает, сколько элементов нужно удалить)

...