我有以下代码,第二个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));
请帮助。
答案 0 :(得分:3)
使用第二个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
函数的执行时调用它。您试图在代码的最后部分执行此操作。
答案 1 :(得分:2)
如果你想在window.onload上触发两个函数,你可以这样做:
function onload1 (){
alert("onload1");
}
function onload2 (){
alert("onload2");
}
window.onload = function() {
onload1();
onload2();
}