代码之家  ›  专栏  ›  技术社区  ›  Gup3rSuR4c

jquery 1.4.2中可能出现错误的“过度递归”错误。

  •  0
  • Gup3rSuR4c  · 技术社区  · 14 年前

    我认为这可能是“假阳性”,但我可能是错的。我有以下脚本,它在一行上崩溃,并出现“太多递归”错误:

    var Win, Doc;
    var Content, Blackout;
    
    $(function () {
        Win = $(window);
        Doc = $(document);
    
        Content = $("#Content");
        Blackout = $("#Blackout");
    
        Content.bind("resize", function () {
            Content.css({
                minHeight: ((Win.height() - Content.position().top) - 20)
            })
    
            Blackout.trigger("resize"); // <- this is where the error appears
                                        //    to be triggering
        }).trigger("resize");
    
        Blackout.css({
            opacity: .2
        }).bind("resize", function () {
            Blackout.css({
                height: Content.innerHeight(),
                width: Content.innerWidth()
            });
        }).bind("click", function () {
            $("div.Wizard:visible").trigger("hide");
        }).trigger("resize");
    
        Win.bind("resize", function () {
            Content.trigger("resize");
        });
    });
    

    从阅读其他有关这方面的主题,我只能假设 Blackout.trigger("resize") 调用,它将查询 Content 通过 innerHeight() 函数,firefox/firebug可以将其解释为递归,从而使其崩溃。我可能错了,但我就是这么想的。

    不管怎样,我都希望能得到一些帮助。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Nick Craver    14 年前

    如果 #Blackout 里面 #Content (我猜是这里的名字)然后事件开始冒泡,导致 resize 你要再次开火了。

    而不是 .trigger() 以不冒泡的方式调用它 .triggerHandler() ,如下所示:

    Blackout.triggerHandler("resize"); 
    

    这样的话 调整大小 事件不会触发 调整大小 处理程序打开 #内容 …这会引起你的循环。