在我的ASP.NET用户控件中,我正在为window.onload
事件添加一些JavaScript :
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName)) Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName, "window.onload = function() {myFunction();};", true);
我的问题是,如果onload
事件中已经存在某些事情,那么这会覆盖它.如何在onload
事件中允许两个用户控件执行JavaScript ?
编辑:感谢第三方库的信息.我会记住它们.
建议的大多数"解决方案"都是特定于Microsoft的,或者需要膨胀的库.这是一个好方法.这适用于符合W3C标准的浏览器和Microsoft IE.
if (window.addEventListener) // W3C standard { window.addEventListener('load', myFunction, false); // NB **not** 'onload' } else if (window.attachEvent) // Microsoft { window.attachEvent('onload', myFunction); }
还有一个丑陋的解决方案(远远不如使用框架或addEventListener
/ attachEvent
)来保存当前onload
事件:
function addOnLoad(fn) { var old = window.onload; window.onload = function() { old(); fn(); }; } addOnLoad(function() { // your code here }); addOnLoad(function() { // your code here }); addOnLoad(function() { // your code here });
请注意,像jQuery这样的框架将提供一种在DOM准备就绪时执行代码的方法,而不是在页面加载时执行代码.
DOM已准备好意味着您的HTML已加载但不包含外部组件(如图像或样式表),允许您在加载事件触发之前调用很长时间.