最近我想出了以下问题:
在我网站的所有html页面中,我在body onLoad事件中调用一个函数:
<body onLoad="func1();">
这是我的html模板的一部分,所以它出现在我网站的每个页面,我不能改变.现在,这个协议是在某些页面上,我需要调用一些其他函数onload,我尝试使用window.onload属性,但它会擦除func1的调用…
我现在可以说:
window.onload = func2(); //where func2() calls to func1()
但这看起来很肮脏?不是吗
那么,有没有办法为那些即将被执行的onload添加一些功能,而不会删除旧的?另外我使用asp.net,如果这可以帮助…
谢谢!
解决方法
您可以使用jQuery链接加载处理程序.反复使用jQuery.load或jQuery(document).ready将链接你的处理程序(我相信).你的另一个选择是以编程方式执行,这意味着你需要一个辅助功能,它将为你链接你的负载处理程序.您可以使用闭包(或匿名函数)来执行此操作:
var addOnLoadHandler = function(newHandler) { if (typeof window.onload != 'function') { window.onload = newHandler; } else { var oldHandler = window.onload; window.onload = function() { if (oldHandler) { oldHandler(); } newHandler(); }; } };
你将不得不以编程方式绑定你的功能,所以你必须做:
addOnLoadHandlers(function() { alert("Hi I am the first onLoad handler!"); }); addOnLoadHandlers(function() { alert("Hi I am the second onLoad handler!"); });
另一种方法是使用数组:
var onloaders = new Array(); function runOnLoads() { for (i = 0; i < onloaders.length; i++) { try { var handler = onloaders[i]; handler(); } catch(error) { alert(error.message); } } } function addLoader(obj) { onloaders[onloaders.length] = obj; }
在您的HTML或Javascript文件中:
addLoader(function() { alert("Hi I am the first onLoad handler!"); }); addLoader(function() { alert("Hi I am the second onLoad handler!"); });
然后在你的html中,你可以做< body onload =“runOnLoads()”>