Почему я получаю эту ошибку во время выполнения Javascript?

#javascript #html #internet-explorer

Вопрос:

У меня на веб-странице есть следующий JavaScript…

 64    var description = new Array();
65    description[0] = "..."
66    description[1] = "..."
...
78    function init() {
79        document.getElementById('somedivid').innerHTML = description[0];
80    }
81
82    window.onload = init();
 

В Microsoft Internet Explorer это вызывает следующую ошибку…

Произошла ошибка во время выполнения.
Вы хотите выполнить отладку?

Строка: 81
Ошибка: Не реализована

ошибка выполнения javascript

Строка 79 выполняется, как и ожидалось.

Если строка 79 закомментирована, она все равно выдает ошибку.

Если я закомментирую строку 82, то функция не выполняется и ошибки нет.

Ответ №1:

Не должна ли строка 82 гласить:

 window.onload = init;
 

Когда вы выполняете «init ()», это вызов функции, которая возвращает значение void. В конечном итоге вы вызываете эту функцию до загрузки страницы.

Комментарии:

1. window.onload = init(); Присваивает результат инициализации window.onload, который ожидает указатель на функцию. Я думаю, что это ошибка.

2. Несколько хороших ответов. Но я принимаю этот вариант, потому что для него требуется всего два нажатия клавиш.

Ответ №2:

Чтобы сохранить все ранее установленные функции загрузки, попробуйте это

 var prevload = window.onload;
window.onload = function(){
    prevload();
    init();
}
 

Комментарии:

1. Проверьте, установлена ли предварительная загрузка первой: предварительная загрузка amp;amp; предварительная загрузка();

2. Вместо этого вы должны использовать attachEvent/addEventListener (и абстрагировать его, если вы делаете это более одного раза).

3. @Ates Goral: Если это так выглядит, то это чертовски сладкий синтаксический сахар.

Ответ №3:

Попробуйте вместо этого добавить прослушиватель envent для «загрузки» или используйте декларативный синтаксис <body onload="init()"> .

РЕДАКТИРОВАТЬ: Кроме того, говоря window.onload = init(); устанавливает window.onload в результат вызова init() . Вы имеете в виду window.onload = init; (лямбда-выражение). Это все еще плохая практика, так как она перезаписывает другие вещи, которые могут быть связаны window.onload .

Комментарии:

1. Вообще-то, это нормально. Обработчик события onload будет выполнен после загрузки окна.

2. Хотя я не понимаю, почему это заслуживает понижения. Разве это неправильно?

3. Удаление строки 82 и обновление тега тела, как описано, работает.

4. Вы можете установить обработчик загрузки в любом месте, где вам нравится. Это может быть даже первое, что вы сделаете внутри первого тега <script> в разделе <script><head>.

Ответ №4:

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

Ответ №5:

Попробуйте запустить его в FireFox с включенным плагином FireBug. Это позволит вам отладить javascript