Ray*_*Ray 59 javascript asp.net events listener
在我的ASP.NET用户控件中,我正在为window.onload事件添加一些JavaScript :
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName,
"window.onload = function() {myFunction();};", true);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果onload事件中已经存在某些事情,那么这会覆盖它.如何在onload事件中允许两个用户控件执行JavaScript ?
编辑:感谢第三方库的信息.我会记住它们.
小智 97
建议的大多数"解决方案"都是特定于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);
}
Run Code Online (Sandbox Code Playgroud)
Vin*_*ert 17
还有一个丑陋的解决方案(远远不如使用框架或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
});
Run Code Online (Sandbox Code Playgroud)
请注意,像jQuery这样的框架将提供一种在DOM准备就绪时执行代码的方法,而不是在页面加载时执行代码.
DOM已准备好意味着您的HTML已加载但不包含外部组件(如图像或样式表),允许您在加载事件触发之前调用很长时间.
小智 6
我今天遇到了类似的问题,所以我解决index.js了以下问题:
window.onloadFuncs = [];
window.onload = function()
{
for(var i in this.onloadFuncs)
{
this.onloadFuncs[i]();
}
}
Run Code Online (Sandbox Code Playgroud)
在我想附加 onload 事件的其他 js 文件中,我只需要这样做:
window.onloadFuncs.push(function(){
// code here
});
Run Code Online (Sandbox Code Playgroud)
虽然我通常使用 jQuery,但这次我被限制在纯 js 中,被迫使用我的大脑一段时间!
| 归档时间: |
|
| 查看次数: |
58785 次 |
| 最近记录: |