Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ASP.NET Новый топик    Ответить
 Осторожно: IE и jQuery 1.8.0  [new]
iConst
Member

Откуда:
Сообщений: 2066
Привет всем.

Столкнулся с такой лажей: в проекте вдруг IE9 стал выдавать ошибку в такой конструкции:
MyObj.Sub.SomeModule = (function(m, $)
{
    $(function()
    {
        init(); // -> Ошибка: Предполагается наличие объекта
    });

    var init = function()
    {
		....
    }
    ...
    return m;
})(MyObj.Sub.SomeModule || {}, jQuery)
Причем во всех ранее прекрасно пахавших модулях!
Одновременно, IE8 это все запросто переваривает. Остальные браузеры тоже молчат.

Причиной тому, как оказалось - подключение новой библиотеки jQuery 1.8.0. Ранее была 1.7.2. Купились на фиксы, быстродействие и т.п.
Проявляется это только если jQuery подключен через ScriptManager.

Странное поведение.
Пока есть два пути решения - откатить на прежний жквери или подключать новый стандартным способом в хедере. Подключение практикуем из CDN (локально - та-же фигня).

Есть мысли?

Перевернув мир - оглянись, может перевернулся ты сам?!
16 авг 12, 12:21    [13019591]     Ответить | Цитировать Сообщить модератору
 Re: Осторожно: IE и jQuery 1.8.0  [new]
Яростный Меч
Member [скрыт]

Откуда:
Сообщений: 28899
iConst,

объяви init() как function declaration
function init() {
	...
}


подозреваю, что на момент вызова $(function() {...}); DOM уже готов, и функция сразу же вызывается, при этом init ещё undefined.
Возможно, в 1.7.2 вызов откладывался.

Но это всё домыслы, не более.
16 авг 12, 12:45    [13019762]     Ответить | Цитировать Сообщить модератору
 Re: Осторожно: IE и jQuery 1.8.0  [new]
iConst
Member

Откуда:
Сообщений: 2066
Яростный Меч
iConst,

объяви init() как function declaration
function init() {
	...
}


подозреваю, что на момент вызова $(function() {...}); DOM уже готов, и функция сразу же вызывается, при этом init ещё undefined.
Возможно, в 1.7.2 вызов откладывался.

Но это всё домыслы, не более.
Забавно, но действительно прокатило! Уже давно и часто использую такую запись, не особо задумываясь. Спасибо!

Только это не решает проблему конструкции методов объекта:
obj.meth1 = function(){...}
...
коих много - На них спотыкается...
От, засада!
В общем, как грится: "Лучшее - враг хорошего!", откатились назад... :)
16 авг 12, 13:43    [13020312]     Ответить | Цитировать Сообщить модератору
 Re: Осторожно: IE и jQuery 1.8.0  [new]
Яростный Меч
Member [скрыт]

Откуда:
Сообщений: 28899
iConst
Только это не решает проблему конструкции методов объекта:
obj.meth1 = function(){...}
...
как вариант, можно $(function() {...}); ставить в конец метода, перед return, чтобы все необходимые объекты были созданы, даже если обработчик вызовется напрямую.
ему всё равно нет никакого смысла быть вначале.
16 авг 12, 14:46    [13020837]     Ответить | Цитировать Сообщить модератору
 Re: Осторожно: IE и jQuery 1.8.0  [new]
bazile
Member

Откуда:
Сообщений: 3082
iConst, попробуй инициализировать init до конструкции $(function() { ... });
MyObj.Sub.SomeModule = (function(m, $)
{
    var init = function()
    {
		....
    }

    $(function()
    {
        init(); // -> Ошибка: Предполагается наличие объекта
    });

    ...
    return m;
})(MyObj.Sub.SomeModule || {}, jQuery)
16 авг 12, 15:04    [13020974]     Ответить | Цитировать Сообщить модератору
 Re: Осторожно: IE и jQuery 1.8.0  [new]
iConst
Member

Откуда:
Сообщений: 2066
Яростный Меч
...
как вариант, можно $(function() {...}); ставить в конец метода, перед return, чтобы все необходимые объекты были созданы, даже если обработчик вызовется напрямую.
ему всё равно нет никакого смысла быть вначале.

bazile
iConst, попробуй инициализировать init до конструкции $(function() { ... });
...

Яростный Меч, bazile
Это все понятно, но не выход - не перелопачивать-же весь проект ради этого... Ведь использование, как гласит жкверевская дока,
$(function() { ... })
равнозначно
$(document).ready(function() { ... })
и вызывается после того, как весь документ будет загружен. Потому там и присутствует... До сего часа не было проблем.
Я склоняюсь к мысли - это псевдо-косяк новой версии жквери: творение МС как всегда чудит. Надеюсь - пофиксят. Опять-же, не забывайте - без ScriptManager-а все ОК.

Яростный Меч, bazile, спасибо за участие.
17 авг 12, 09:54    [13024606]     Ответить | Цитировать Сообщить модератору
Все форумы / ASP.NET Ответить