javascript - 第二个 onload 函数不起作用

标签 javascript onload

我有以下代码,第二个 onload 事件没有触发:

    <script type="text/javascript">
    var startime = (new Date()).getTime();

    window.onload = function(){ record_visit('ol'); } //ol - onload
    window.onload = function(){ setInterval("upState()", 30000); }
    window.onbeforeunload = function(){ record_visit('obul'); } //obul = onbeforeunload

    function record_visit(value) {
        var x = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
        x.open("GET", "count_visit.php?t=" + (((new Date()).getTime() - startime) / 1000)+"&type="+value+"&url="+escape(window.location.href), false);
        x.send(null);
    }

    function upState()
    {
        // create the AJAX variable
        var xmlhttp;
        if (window.XMLHttpRequest)
            xmlhttp = new XMLHttpRequest();
        else
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

        // make the AJAX call
        xmlhttp.open("GET", "count_visit.php?t=" + (((new Date()).getTime() - startime) / 1000)+"&type=update&url="+escape(window.location.href), false);
        x.send(null);
    }   
</script>

我在这里只需要使用 count_visit.php 发送请求并更新访客仍然在线的表格。

我尝试了一些我在某个网站上找到的代码,但它仍然没有触发。这是代码:

    function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}
addLoadEvent(record_visit('ol'));
addLoadEvent(setInterval("upState()", 30000));

请帮忙。

最佳答案

第二个window.onload您正在覆盖之前定义的那个。由于您没有使用 jQuery(这使这些事情变得更容易),请使用以下函数

function myEvent(where,evt,func,op)
{
 if (op)
  {
   if (where.attachEvent) where.attachEvent("on"+evt,func);
   else if (where.addEventListener) where.addEventListener(evt,func,false)
  }
  else 
  {
   if (where.detachEvent) where.detachEvent("on"+evt,func);
   else if (where.removeEventListener) where.removeEventListener(evt,func,false);
  }
}

where - 将事件监听器添加到的对象

evt - 事件的名称(没有'on'部分)

func - 事件调用函数

op - 如果设置为 true该函数将添加监听器,如果它设置为 false该函数将删除监听器。

将其命名为 myEvent(window, 'load', func, true);并且无论您添加多少函数 - 所有这些函数都将在给定事件中被调用。

ps: 或者你可以手动组合两个函数的内容:))

window.onload = function(){ 
      record_visit('ol'); 
      setInterval(upState, 30000); 
}

使用此方法,您必须检查前一个事件处理程序是否存在,将其保存在某个全局变量中,并在稍后处理最终且唯一的一个 window.onload 的执行时调用它。功能。您试图在代码的最后部分执行此操作。

关于javascript - 第二个 onload 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9451244/

相关文章:

javascript - window.onload/onunload 和 body.onload/onunload 的区别

javascript - AJAX 和浏览器后退按钮

html - body.onload 是否等待 IFrame?

javascript - 将 Jquery 类应用于只有一个元素的所有子元素

javascript - Angular 链接函数范围未正确更新

javascript - 如何在文档准备好时在 AngularJS Controller 中运行功能?

页面渲染后执行 Javascript IE6

Javascript .onload 不在 IE 中触发? window.open 引用问题?

php - 超时或重新激活 PHP 中的数据库条目

javascript - html背景图片更改为css?