Ошибка "Слишком много рекурсии" при загрузке той же страницы с помощью хэша - PullRequest
0 голосов
/ 15 января 2011

У меня есть сайт с страницей галереи изображений («Портфолио»).Существует раскрывающаяся навигация, которая позволяет пользователю просматривать определенное изображение в портфолио с любой страницы сайта.Ссылки в навигации используют хэш, и этот хэш читается и преобразуется в строку имени файла изображения.Атрибут изображения src на странице / portfolio / заменяется новым именем файла изображения.

Это прекрасно работает, если я щелкаю раскрывающуюся ссылку со страницы ДРУГОГО, чем сама страница / портфолио /.Однако, если я выполню то же действие со страницы / портфолио /, я получу ошибку «слишком много рекурсии» в Firefox.Вот код:

Фрагмент разметки nav:

<li>Portfolio Category A
  <ul>
      <li><a href="/portfolio/#dining-room-table">Dining Room Table</a></li>
      <li><a href="/portfolio/#bathroom-mirror">Bathroom Mirror</a></li>

  </ul>
</li>

JS, который считывает хэш, преобразует его в имя файла изображения и заменяет изображение на странице:

$(document).ready(function()
{
    if(location.pathname.indexOf("/portfolio/") > -1)
        {
            var hash = location.hash;
            var new_image = hash.replace("#", "")+".jpg";
            swapImage(new_image);
        }
});

function swapImage(new_image)
{
    setTimeout(function()
    {
        $("img#current-image").attr("src", "/images/portfolio/work/"+new_image);
    }, 100);
}

Я использую функцию setTimeout, потому что я стираю старое изображение перед выполнением замены, а затем возвращаю его обратно. Сначала я думал, что это была функция, которая вызывала ошибку рекурсии, но когда яудалить setTimeout У меня все еще есть эта проблема.

Это имеет отношение к закрытию, о котором я не знаю?Я довольно зеленый в замыканиях.

JS, который прослушивает щелчок по навигационной панели:

$("nav.main li.dropdown li ul li").click(function()
{
    $(this).find("a").click();
    $("nav.main").find("ul ul").hide();
    $("nav.main li.hover").removeClass("hover");
});

Я еще не реализовал функцию постепенного исчезновения / появления для раскрывающейся навигационной панели,но я реализовал его для стрелок «Далее» и «Предыдущий», которые также можно использовать для замены изображений с помощью той же функции swapImage.Вот этот код:

$("#scroll-arrows a").click(function()
{

    $("#current-image").animate({ opacity: 0 }, 100);

    var current_image = $("#current-image").attr("src").split("/").pop();
    var new_image;
    var positions = getPositions(current_image);

    if($(this).is(".right"))
    {
        new_image = positions.next_img;
    }
    else
    {
        new_image = positions.prev_img;
    }

    swapImage(new_image);

    $("#current-image").animate({ opacity: 1 }, 100);

    return false;
});

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

too much recursion
var ret = handleObj.handler.apply( this, arguments );
jquery.js (line 1936)

Спасибо за любой совет.

1 Ответ

0 голосов
/ 15 января 2011

Я бы предположил, что нажатие на ссылку также вызывает щелчок по UL / LI, который вы наблюдаете и при котором вы выполняете (еще один) щелчок по привязке, который снова вызывает вашего наблюдателя и так далее.Каждый раз, когда / портфолио / затем перезагружается, и готовый () срабатывает, и где-то там он повторяется.Вы пытались посмотреть на стек вызовов в отладчике?Должно стать довольно очевидным, между какими методами он прыгает.

Рене

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