Связывание события document.ready: IE ведет себя по-другому

Я привык печатать: $(function(){}); синтаксис для связывания событий и других действий в document readyevent. Но я заметил, что в IE8 возникают проблемы с вызовом функций из некоторых включенных js-файлов. Я бы не смог его взломать, если бы на странице не было кода от дизайнера (он поставил какое-то слайд-шоу :D). В коде слайд-шоу использовался старый синтаксис $(document).ready(function(){});, и он работал. Я удалил свой код и поместил его с кодом инициализации слайд-шоу, и все заработало.

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

РЕДАКТИРОВАТЬ:

<script src="jquery.js" type="text/javascript"></script>
<script src="custom.js" type="text/javascript"></script>

$(function(){
    myCustomFunction(); ///THIS IS CAUSING EXCEPTION IN IE 8
});


$(document).ready(function(){
    myCustomFunction(); ///THIS IS WORKS IN IE 8
});

person TheVillageIdiot    schedule 22.11.2011    source источник


Ответы (2)


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

Я также сталкивался с подобной проблемой раньше, но это было связано с тем, что мои теги script не были закрыты должным образом, посмотрите здесь: Как $(document).ready() работает в IE 8?

person hendrikswan    schedule 22.11.2011
comment
Не то, что указано в связанном вопросе. jQuery включен точно и введено $(function(){}). - person TheVillageIdiot; 22.11.2011

Проблемы могут быть вызваны тем, что JQuery еще не загружен, попробуйте запустить следующий код перед кодом $(document).ready для проверки:

if (jQuery) alert('jquery loaded')
else alert('jquery not loaded')

У нас была похожая проблема с совместимостью браузера, не помню, был ли это IE8. Это было вызвано атрибутом 'type' тегов скрипта.

Некоторые из них были помечены как «текст/javascript» (рекомендация W3C), 'application/javascript' и некоторые без атрибута типа. JQuery был в верхней части заголовка с надписью «текст/javascript», но по-прежнему загружался последним.

Проблема была легко решена путем размещения одного и того же ContentType во всех тегах скрипта.

person Peter Riesz    schedule 22.11.2011
comment
jQuery загружается. он входит в $(function(){}), но не вызывает код внутри этой функции из другого включенного файла. - person TheVillageIdiot; 22.11.2011