2008-08-13 11 views
56

私のASP.NETユーザーコントロールでは、window.onloadイベントにいくつかのJavaScriptを追加しています。複数のwindow.onloadイベントを追加する

if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName)) 
    Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName, 
    "window.onload = function() {myFunction();};", true);    

onloadイベントに既に何かがある場合、これを上書きするのが私の問題です。 onloadイベントでJavaScriptを実行する2つのユーザーコントロールを許可するにはどうすればよいですか?

編集:サードパーティのライブラリに関する情報をありがとう。私はそれらを念頭に置いておきます。

+1

おしっこいけないとこれを行うことができます! fyi、firefoxの場合、そのwindow.attachEvent( 'load'、myFunction); not window.attachEvent( 'ONload'、myFunction); –

答えて

93

示唆した「ソリューション」のほとんどは、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); 
} 
+1

注:window.attachEvent( 'onload'、myFunction);で関数が割り当てられています(myFunction)。 window.onloadに割り当てられた関数の後に常に起動されます – user961954

+1

私を実践してください、NBは何ですか** 'onload'はどういう意味ですか? – meJustAndrew

+0

@meJustAndrew彼はaddEventListenerを使用するときには'load 'を使用しないで、単に' load 'を使用することを意味します。 – fmacdee

1

私はASP.NETについてよく分かりませんが、onloadイベントのカスタム関数を記述して、両方の関数を呼び出してみてはいかがですか? 2つの機能を持っている場合は、イベント用に登録した3番目のスクリプトから両方の機能を呼び出します。

2

JQueryのように、複数のイベントハンドラを追加するためのフレームワークを提供していますか?

window.attachEvent("onload", myOtherFunctionToCall); 

function myOtherFunctionToCall() { 
    // do something 
} 

編集:ねえ、私はFirefoxを使ってログインし、これを自分自身を再フォーマットする準備をした

+2

これを拡張してもいいですか? – adhanlon

2

はこれを試してみてください! IE7で私のコードを書式設定するようには思われません。

1

実際にはによると、のように複数のスクリプトを登録するために複数回呼び出すことができます。別のキー(2番目の引数)を使用するだけです。

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key1, function1, true); 

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key2, function2, true); 

私はそれがうまくいくと思います。

+0

これらのスクリプトは、ページが取得されたときに実行されませんか?オンロード中ではない? – Ray

4

Mootoolsは非常に使いやすく、jQueryと言ったRedWolvesのように、あなたが望むだけ多くのハンドラーを保持することができます。

すべての* .jsファイルについて、私は関数にコードをラップするだけです。

window.addEvent('domready', function(){ 
    alert('Just put all your code here'); 
}); 

そして、まだ現在onloadイベント保存することです(フレームワークやaddEventListener/attachEventを使用してはるかに劣っている)醜いソリューションがあるにもadvantages of using domready instead of onload

17

あります

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がロードされているがイメージやスタイルシートなどの外部コンポーネントがロードされていないことを意味し、ロードイベントが発生する前に長時間呼び出すことができます。

4

私はそれは次のように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に限られていたこの時間は、しばらくの間、私の心を使用するように強制WICH!

1

あなたは何stinkinライブラリを必要としないjqueryの

$(window).load(function() { 
    // jQuery functions to initialize after the page has loaded. 
}); 
関連する問題