[英]“Too much recursion” error when loading the same page with a hash
我有一个带有图片库(“作品集”)页面的网站。 有一个下拉导航,允许用户从网站上的任何页面查看投资组合中的特定图像。 导航中的链接使用哈希,然后读取该哈希并将其转换为图像文件名的字符串。 然后,将/ portfolio /页面上的image src属性换成新的图像文件名。
如果我从/ portfolio /页面本身以外的页面单击下拉链接,则此方法很好用。 但是,如果我从/ portfolio /页面执行相同的操作,则会在Firefox中收到“递归过多”错误。 这是代码:
导航标记的代码段:
<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)
感谢您的任何建议。
我假设单击链接还会触发对您观察到的UL / LI的单击,并在其中执行(另一个)单击锚点,这又会触发您的观察者,依此类推。 每次/ portfolio /然后重新加载,并且ready()触发并且在其中的某个地方递归。 您是否尝试查看调试器中的调用堆栈? 反弹之间应该很明显。
雷内
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.