Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript onunload触发了多少次?_Javascript_Events - Fatal编程技术网

Javascript onunload触发了多少次?

Javascript onunload触发了多少次?,javascript,events,Javascript,Events,我刚刚在一个问题上得到了帮助 为了彻底解决这个问题,我想知道onunload是一次触发还是每次事件发生时触发 换句话说,每次子窗口win被重定向、关闭等时,我的函数startLoad会运行吗?还是只做一次,就这样 抱歉,如果这是一个愚蠢的问题 谢谢大家它应该只会在第一次卸载窗口时启动一次。其他任何东西都将是一个安全漏洞。否-当您在IE6和IE7中导航离开页面时,此方法可能会触发多次 此代码段说明了另存为OnUnloadTest.htm: <body> <form id=

我刚刚在一个问题上得到了帮助

为了彻底解决这个问题,我想知道onunload是一次触发还是每次事件发生时触发

换句话说,每次子窗口win被重定向、关闭等时,我的函数startLoad会运行吗?还是只做一次,就这样

抱歉,如果这是一个愚蠢的问题


谢谢大家

它应该只会在第一次卸载窗口时启动一次。其他任何东西都将是一个安全漏洞。

否-当您在IE6和IE7中导航离开页面时,此方法可能会触发多次

此代码段说明了另存为OnUnloadTest.htm:

<body>
    <form id="form" action="OnUnloadTest.htm" method="post">
        Click <a href="javascript:form.submit()">here</a>
    </form>
    <script type="text/javascript">
        window.onbeforeunload = beforeunload
        function beforeunload() {
            alert('OnUnload');
        }
    </script>
</body>
基本上,事件在实际的锚点击时触发一次,在页面实际发回时触发一次。我只在锚点的href中包含javascript时见过这个问题,不过如果使用ASP.NET链接按钮,则会收到警告,因为这会将javascript放入href中


对于大多数其他类型的导航,例如用户单击普通定位,或关闭浏览器,或使用书签导航,etc事件只触发一次。

请阅读有关卸载事件如何与现代浏览器的页面缓存功能配合使用的有趣讨论。

如果您想确保事件处理程序只运行一次,则可以在第一次调用处理程序时将其自身解除绑定。这将保证回调不会运行多次:

var win = window.open(url, name);
win.onunload = function(event) {
    win.onunload = function() {}; // assign a noop
    return Startload.call(this, event);
};
win.close();
一些JavaScript库有一个内置的助手,用于绑定只希望运行一次的事件处理程序。例如,jQuery有一个用于此目的的方法:

var win = window.open(url, name);
$(win).one('unload', Startload);
win.close();

卸载事件的问题不是在卸载事件之前吗?
var win = window.open(url, name);
$(win).one('unload', Startload);
win.close();