繁体   English   中英

使用散列加载同一页面时出现“太多递归”错误

[英]“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM