#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
Ошибка: Не реализована
Строка 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