我认为这可能是“误报”,但我可能是错的。我有以下脚本,它崩溃在一行“过多的递归”错误:
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可以将其解释为递归因而崩溃了。我可能错了,但这就是我想出来的。
答案 0 :(得分:4)
如果#Blackout
里面是 #Content
(我猜这里是名字),那么事件正在冒泡并导致你resize
处理程序'再次开枪。
而不是.trigger()
以不使用.triggerHandler()
冒泡的方式调用它,如下所示:
Blackout.triggerHandler("resize");
这样resize
事件就不会触发resize
上的#Content
处理程序...导致你的循环。