Ошибка JavaScript только в IE7 (jQuery / Cycle.js - PullRequest
0 голосов
/ 21 августа 2010

Я использую jQuery и cycle.js, чтобы растушевать некоторые изображения на этом сайте.

На первом и последнем слайдах я поместил функцию обратного вызова для перехода к следующим / предыдущим страницам,Однако в IE7 я получаю ошибку JavaScript во время выполнения (не в других браузерах).

Вот ссылка на мой файл JavaScript: http://bit.ly/dAKEof

Ошибка, которую я получаю в IE7:

Строка: 126 Char: 4 Ошибка: объект ожидается код: 0

Вот код, который у меня есть в строке 126 файла functions.js:

window.location = $ ('# next'). Find ("a"). Attr ("href");

Есть идеи?

1 Ответ

0 голосов
/ 21 августа 2010

Я не увидел ссылку на сайт с ошибкой в ​​вашем вопросе, но увидел URL-адрес в вашем профиле и зашел туда, чтобы узнать, может ли это быть тем.Похоже, что это ...

IE печально известен неправильными номерами строк в своих ошибках JavaScript.Ошибка на самом деле в строке 125:

function onBefore(curr, next, opts, fwd) {
    // If the page isn't loading or refreshing - initCycle == false (fixes auto unbinding of slide opts on load)
    // If is last slide and next slide is fwd direction go to next project instead of wrapping cycle
    if(opts.currSlide + 1 == opts.slideCount && fwd && !initCycle){
        opts.end(opts); // <-- this line is failing b/c the end function is null
        window.location = $('#next').find("a").attr("href");
    }
    // If is first slide, and next slide is bkwd direction go to prev project instead of wrapping cycle
    else if(opts.currSlide + 1 == 1 && !fwd){
        opts.end(opts); // <-- this also fails for the same reason
        window.location = $('#prev').find("a").attr("href");
    }
}

Функция end в объекте ops равна нулю, и именно в этом и заключается ошибка.Интересно, что я также проверил в FF, и это также верно там, но в этом случае он восстанавливается более изящно, чем IE.

Из остального кода не совсем понятно, как функция onBeforeвызывается.Похоже, это может быть сам плагин цикла.В любом случае, где бы ни происходил этот вызов, объект opts, по-видимому, не заполняется всеми данными, необходимыми для вашей функции.

Обновление:

Я взглянул на код подключаемого модуля цикла и opts.end - это обратный вызов, который должен предоставить пользователь подключаемого модуля.Таким образом, решение вашей проблемы - либо предоставить свой собственный обратный вызов при создании объекта цикла (строка 101 в вашем файле js), либо удалить строки в вашем коде, которые вызывают функцию end.

Обновление в ответ на комментарий ОП ниже:

После более тщательной проверки ваш код будет фактически выполнять то, что вы хотите, без необходимости вызывать обратный вызов end, чтобы вы могли безопасно удалить эти строки.Плагин запускает ваш обратный вызов onBefore до того, как он выполнит анимацию.А поскольку вы перезагружаете новый URL-адрес в браузере при перемещении назад от 1-го слайда или вперед от последнего, он даже не попадает в анимацию исчезновения, которая является вашей целью.

Однако, чтобы ответить на ваш вопросо том, как добавить обратный вызов end к исходному объекту цикла, вы сделаете это точно так же, как для onBefore и onAfter.Создайте функцию с любым кодом, который вы хотите выполнить, и затем включите end: yourFuncName в хэш объекта, переданный плагину.Другой способ остановить плагин цикла - $(selector).cycle('stop');.Но опять же, ничего из этого не нужно в вашем случае.Просто уберите звонки на end и все будет в порядке.

...