У меня есть сайт с страницей галереи изображений («Портфолио»).Существует раскрывающаяся навигация, которая позволяет пользователю просматривать определенное изображение в портфолио с любой страницы сайта.Ссылки в навигации используют хэш, и этот хэш читается и преобразуется в строку имени файла изображения.Атрибут изображения 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)
Спасибо за любой совет.