我有一些小部件加载到小部件网格上。每个小部件都有一个JavaScript方法,每隔'x'秒刷新一次。这是通过在每个小部件的Javascript方法上调用setInterval来完成的。针对窗口调用setInterval:
window.[FunctionName] = setInterval(FunctionName, RefreshTime * 1000);
其中FunctionName
是JavaScript方法的名称,RefreshTime
是以秒为单位刷新之前的时间。
删除每个窗口小部件后,找到Javascript函数的名称,并按如下方式清除间隔:
$(".grid").on("click", ".panel-close", function () {
var widget = $(this).parent();
var jscrpt = $(widget).find(".RefreshMethod");
if (jscrpt.length > 0) {
window[jscrpt.data("name")] = null;
clearInterval(window[jscrpt.data("interval")]);
}
RemoveWidget(widget);
})
由于jscrpt
元素具有name
属性,因此可以找到方法的名称,并在删除窗口小部件时清除间隔,从而阻止进一步刷新。这很有效。
但是,如果页面加载了ajax并且删除了整个小部件网格,则没有删除事件。我开始调查使用beforeunload
事件,如下所示:
$(".grid .widget").bind("beforeunload", function (event) {
var widget = $(this);
var jscrpt = $(widget).find(".RefreshMethod");
if (jscrpt.length > 0) {
window[jscrpt.data("name")] = null;
clearInterval(window[jscrpt.data("interval")]);
}
})
当要清除元素时调用此函数。这在删除窗口小部件或覆盖元素时有效。但是,使用$(this)
不起作用 - 该对象是“beforeunload”类型对象。 event
也未定义 - 我无论如何都无法识别正在卸载哪个小部件。
问题是,当我将beforeunload
函数绑定到一个元素时,触发该函数时如何识别哪个元素触发了该函数?