获取元素绑定到beforeunload函数

时间:2015-07-28 03:58:27

标签: javascript jquery widget

我有一些小部件加载到小部件网格上。每个小部件都有一个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函数绑定到一个元素时,触发该函数时如何识别哪个元素触发了该函数?

0 个答案:

没有答案