複数の window.onload イベントを追加する
-
08-06-2019 - |
質問
ASP.NET ユーザー コントロールに JavaScript を追加しています。 window.onload
イベント:
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName,
"window.onload = function() {myFunction();};", true);
私の問題は、すでに何かがある場合です。 onload
イベントが発生した場合、これにより上書きされます。2 つのユーザー コントロールがそれぞれ JavaScript を実行できるようにするにはどうすればよいでしょうか。 onload
イベント?
編集: サードパーティライブラリに関する情報をありがとうございます。覚えておきます。
解決
提案されている「ソリューション」のほとんどは Microsoft 固有のものであるか、肥大化したライブラリを必要とします。良い方法が 1 つあります。これは、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 はロードされているが、画像やスタイルシートなどの外部コンポーネントはロードされていないことを意味し、load イベントが発生するかなり前に呼び出すことができます。
今日同様の問題があったので、次のようにして解決しました index.js
以下のとおりです。
window.onloadFuncs = [];
window.onload = function()
{
for(var i in this.onloadFuncs)
{
this.onloadFuncs[i]();
}
}
そして、onloadイベントを添付したい追加のjsファイルでは、これを行うだけです:
window.onloadFuncs.push(function(){
// code here
});
いつもは jQuery を使っていますが、今回は純粋な js に限定され、しばらく頭を使いました。
ムーツール これも非常に使いやすい優れた JavaScript フレームワークであり、RedWolves が言ったように、 jQuery 必要なだけハンドラーをチャックし続けることができます。
インクルードするすべての *.js ファイルについて、コードを関数でラップするだけです。
window.addEvent('domready', function(){
alert('Just put all your code here');
});
そして、もあります onload の代わりに domready を使用する利点
これを試して:
window.attachEvent("onload", myOtherFunctionToCall);
function myOtherFunctionToCall() {
// do something
}
編集:おい、ちょうど Firefox でログインして自分で再フォーマットする準備をしていたところだったんだ!IE7 ではまだコードをフォーマットできないようです。
ASP.NET についてはあまり詳しくありませんが、両方の関数を呼び出す onload イベント用のカスタム関数を作成してみてはいかがでしょうか。2 つの関数がある場合は、イベントに登録する 3 番目のスクリプトから両方を呼び出します。
次のようなものを使用することを検討しましたか JQuery 複数のイベント ハンドラーを追加してクリーンアップするためのフレームワークを提供するものはどれですか?
実は、によれば、 このMSDNページ, 、あなたに似ています できる 複数のスクリプトを登録するには、この関数を複数回呼び出します。別のキー (2 番目の引数) を使用する必要があるだけです。
Page.ClientScript.RegisterStartupScript(
this.GetType(), key1, function1, true);
Page.ClientScript.RegisterStartupScript(
this.GetType(), key2, function2, true);
それはうまくいくはずだと私は信じています。
jQueryでこれができます
$(window).load(function () {
// jQuery functions to initialize after the page has loaded.
});