質問

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);

それはうまくいくはずだと私は信じています。

これが回答済みであることは承知していますが、この機能について知っておいていただきたいのです。

http://phrogz.net/JS/AttachEvent_js.txt

Tさんよろしく

jQueryでこれができます

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top