IE JQuery готовая функция не работает - PullRequest
9 голосов
/ 13 января 2012

Очевидно, что многие сталкивались с этой проблемой, но мне еще не удалось найти решение, которое работает.

У меня есть немного кода, который необходимо запустить после загрузки страницы, и поэтомуЯ вставил его в следующий блок:

$(document).ready(function() {
    alert("Running initialization");
    initialize();
});
function checkDivLoaded() {
    if ( $('#footer').length == 0) $.error( 'not ready' );
}
function initialize() {
    try{
        checkDivLoaded();
        ...more code here
    } catch (err) {
        setTimeout(initialize, 200);
    }
}

Это прекрасно работает во всех браузерах, за исключением IE.Там код не выполняется вообще.

Этот код находится в самой нижней точке страницы, которую я могу поместить (использование Zend Framework и специфичных для страницы функций ready () означает, что существует ограничение).насколько низко на странице это может идти).Я проверил включения для файлов js, которые загружаются из локальной версии, и все они имеют форму

<script type="text/javascript" src=""></script>

Есть идеи?

NOTE

Когда я открываю отладчик в IE, он начинает работать правильно.

Ответы [ 7 ]

13 голосов
/ 13 января 2012

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

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

Вместо $(document).ready(function(){}); вы можете просто сделать $(function(){}). это не должно иметь никакого значения.

Также, пожалуйста, не передавайте строки в setTimeout (они получают eval 'd в глобальной области видимости), передайте функцию.

setTimeout(initialize, 200);

Кроме того, вы уверены, что объявили $jquery (не должно быть $.error)?

<script type="text/javascript">
   $(function() {
       initialize();
   });
   function checkDivLoaded() {
       if ($('#footer').length == 0){
          $jquery.error( 'not ready' );
       }
   }
   function initialize() {
       try{
           checkDivLoaded();
           //...more code here
       } catch (err) {
           setTimeout(initialize, 200);
       }
   }
</script>

РЕДАКТИРОВАТЬ: Если вы используете IE8 или ниже, он не добавляет console, если отладчик не открыт (я хотел бы, чтобы любой, кто посчитал это хорошей идеей, был уволен). Если одно из ваших включений использует console.log, это будет undefined, что приведет к остановке всех сценариев.

Попробуйте добавить это вверху страницы:

window.console = window.console || {log:function(){}};

Он создаст "поддельный" console объект, так что будет определено console.log.

4 голосов
/ 27 июня 2013

Просто была такая же проблема. Почти сломал мой мозг, пытаясь понять, что не так.

Оказалось очень просто - некоторый код, который был выполнен ранее, использовал console.log (...) , но он не определен в IE, если не включены средства разработки.

Исправить несложно - либо удалите / прокомментируйте console.log, либо добавьте этот код в один из ваших файлов перед использованием первого console.log :

if (typeof console === "undefined"){
    console={};
    console.log = function(){};
}
0 голосов
/ 15 ноября 2017

Использование (function($) {})(jQuery); исправило проблему для меня.

(function($) {
  // body code
})(jQuery);
0 голосов
/ 18 ноября 2015

Это сработало для меня. Я заменил

$(document).ready(function...

с

jQuery(document).ready(function...
0 голосов
/ 27 августа 2014

не знаю, где я нашел это решение, но оно работает для моего IE10.

Пример из моего проекта:

var windowOnload = window.onload || function() {
                $('.toInitiate')[0].click();
                 $('a').click(function() {

                        if(this.className.indexOf("collapse") == -1)
                        {
                            $('.active').removeClass('active');
                            $(this).parent().addClass('active');
                            var className = $(this).parent().attr('class');
                        }
                    });

            };

            window.onload = function() {
                windowOnload(); 
            };

Эти коды выполняются после загрузки всего содержимого html.

0 голосов
/ 22 ноября 2013

Напишите две строчки вверху страницы.

    window.console = window.console || {log:function(){}};
    if (typeof console === "undefined"){
        console={};
        console.log = function(){};
    }

Это решило мою проблему

0 голосов
/ 13 января 2012

Попробуйте поставить свой

$(document).ready(function...

внизу кода. Возможно, IE не проанализировал код initialize() до вызова функции ready.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...