jQuery 1.4.2中可能存在错误的“过多递归”错误

时间:2010-10-26 19:50:31

标签: jquery

我认为这可能是“误报”,但我可能是错的。我有以下脚本,它崩溃在一行“过多的递归”错误:

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 个答案:

答案 0 :(得分:4)

如果#Blackout 里面是 #Content(我猜这里是名字),那么事件正在冒泡并导致你resize处理程序'再次开枪。

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

Blackout.triggerHandler("resize"); 

这样resize事件就不会触发resize上的#Content处理程序...导致你的循环。