Есть ли такая вещь, как слишком много обработчиков $ (document) .ready (IE)? - PullRequest
3 голосов
/ 25 августа 2009

Моя среда разработки основана на LAMP (Drupal); есть несколько файлов JS (jQuery), которые обслуживаются для обеспечения различных функциональных возможностей.

До недавнего времени все работало нормально (ну, IE6 был отвратительным, но, по крайней мере, работал). Однако недавно один из моих файлов JS начал отказываться выполнять на всех в IE6 и IE7.

Если файл содержит следующее, я получаю два предупреждения с надписью «HELLO» и «GOODBYE»:

alert('HELLO');
alert('GOODBYE');

Однако, когда я добавляю готовый обработчик, я получаю ровно ноль предупреждений:

alert('HELLO');
$(document).ready(function(){
alert('AWESOME!!!!!!!!!!!!');
}
alert('GOODBYE');

Странно то, что мой код работает нормально (например, мы видим «УДИВИТЕЛЬНЫЙ !!! ...») в Firefox и IE8. Кроме того, этот код хорошо работал в IE6 / 7. Чтобы сделать вещи еще более странными, jQuery в других JS-файлах по-прежнему выполняется без инцидентов. Возможно, у меня слишком много готовых обработчиков? (У меня есть только около пяти ...?)

Есть мысли? Я боролся с этим часами, и я понятия не имею, что происходит. Заранее спасибо за помощь!

UPDATE Благодаря Alconja (ниже), мы определили, что проблема была в пропущенных скобках и точках с запятой. Я исправил проблему в своем небольшом кусочке тестового кода и предупреждения () выполнялись, как и ожидалось. Однако, когда я вернулся к своей полноразмерной кодовой базе, пара «пара / точка с запятой» присутствовала . Однако, учитывая то, что я испытал при использовании короткого тестового набора (и ошибку, которую я непреднамеренно внес при удалении моего полноразмерного кода до тестового набора), я знал, что проблема была связана с синтаксической ошибкой в ​​javascript. Итак, я просто просмотрел файл, удаляя все большие и большие части кода, пока не появилось окно alert ().

Как и следовало ожидать, (оригинальная) проблема возникла из-за синтаксической ошибки. Мой (неверный) код был:

    $.post(
        '../ajax/changeUrl',
        {
            url: url,
        },
        function(responseText, textStatus, xhr) {
            // console.log(this);
            // console.log(responseText);
            // console.log(textStatus);
            // console.log(xhr);
        }
    );

Как видите, в строке есть дополнительная запятая с надписью 'url: url,'. Как только я удалил эту запятую, скрипт выполнялся правильно. Конечно, Firefox и другие браузеры не стали так сильно критиковать это, как это сделал IE, и я знаю, почему я вставил эту ошибку - это плохая привычка, вызванная снисходительностью PHP с запятыми в определениях массивов (или, возможно, списках параметров / переменных в общем тоже) ...

В любом случае, это исправлено! Итак, еще раз спасибо всем! :)

Ответы [ 2 ]

6 голосов
/ 25 августа 2009

Если это именно тот код, который вы пытаетесь запустить, вам не хватает закрывающей скобки и точки с запятой ... try:

alert('HELLO');
$(document).ready(function(){
    alert('AWESOME!!!!!!!!!!!!');
});   //close the ready function call & statement
alert('GOODBYE');
2 голосов
/ 25 августа 2009

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

alert('HELLO');
$(document).ready(
    function(){
        alert('AWESOME!!!!!!!!!!!!');
    }

    alert('GOODBYE');

Вы ясно видите, что чего-то не хватает.

Если вы берете опубликованный ответ и вкладываете его:

alert('HELLO');
$(document).ready(
    function(){
        alert('AWESOME!!!!!!!!!!!!');
    }
);   //close the ready function call & statement

alert('GOODBYE');

Вы можете видеть, что это идеально.

Соответствующие табуляции действительно помогают избежать этих проблем:)

...