2009-06-12 48 views
16

JavaScriptを挿入するASP.NetコントロールpageLoadがあります。私はまたpageLoad機能をページに直接持っている。私はそれらを両方とも発射させることができない。あなたはjavascriptで同じ名前の関数が1つだけに制限されていますか?私はShog9に反対する必要がASP.Net AJAXの複数ページロード機能は可能ですか?

答えて

33

はい...ほとんどの言語と同様、JavaScriptでは、そのスコープ内で一意の記号を使用する必要があります。 JavaScriptでは、指定されたスコープ内の関数に対して複数の定義を作成した場合、最後に定義された定義が「勝つ」 - 前の定義が存在しなかったかのようになります。

冗長pageLoad機能を動作させるには、Sys.Application.add_load()メソッドを使用する必要があります。これを使用して、ページ・ロード・イベントに必要な数のハンドラーを接続できます。また、匿名関数を使用してadd_loadメソッドを追加することもできます。これを行うと、名前が重複しているハンドラに危険がないことが保証されます。例:あなたはのように簡単にクライアント側でSys.Application.add_loadを使用することができます

StringBuilder sb = new StringBuilder(); 
    sb.Append("Sys.Application.add_load("); 
    sb.Append("function() { alert('page load'); });"); 

ClientScript.RegisterStartupScript(this.GetType(), "Page_Load", sb.ToString(), true); 

、あなたも、複数回同じハンドラを追加することができます。これにより、同じ関数が複数回実行されます。

-2

...

は、私はそれが(ドキュメント).ready(F(n))は、複数の$を持つことが可能ですそれぞれが順番に呼び出されて、単一の文書に呼び出す知っているときDOMの読み込みが完了します。私はClientScript.RegisterStartupScript()への複数の呼び出しが問題を引き起こすとは思わない。

+7

Josh、jQueryは、複数のハンドラを1つのイベントにバインドすることをサポートしています。彼は、グローバルなpageLoad関数のビルトインASP.NET AJAX自動バインディングについて話しています。 ASP.NET AJAXは複数のハンドラを1つのイベントにバインドすることもサポートしていますが、基本言語が同じ名前の複数の関数をサポートしていないという事実は変わりません! – Shog9

+0

ああ良い点!私は元のポストでそれを逃した。そのことについて私を訂正して –

関連する問題