変更できない.ascxコントロールにcssを設定するpageLoad関数があります。ページの読み込みではすべてが正常ですが、更新パネルがコントロールを更新すると、私のcssは適用されなくなります。ページの更新後に関数を再実行するにはどうすればよいですか?
$(function() {
$("textarea").attr("cols", "30");
$("input.tbMarker").css({ "width": "100px" }).attr("cols","25");
});
これは明らかに最初のページのロードでのみ実行されます。更新後に実行するにはどうすればよいですか?
Add_pageLoadedハンドラーを追加することもできます。
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);
注:ハンドラーはあらゆるコールバックに対して起動しますが、sender._postBackSettings.panelID
関数を呼び出したいときにフィルタリングします。
その他のサンプル:
最も簡単な方法は、JavaScriptコードでMSAjax pageLoadイベントを使用することです。
<script>
///<summary>
/// This will fire on initial page load,
/// and all subsequent partial page updates made
/// by any update panel on the page
///</summary>
function pageLoad(){ alert('page loaded!') }
</script>
私はそれを何度も使用しましたが、それは魅力のように機能します。最も重要なことは、それをdocument.ready関数と混同しないことです(ページDocument Object Model(DOM)がJavaScriptコードを実行する準備ができた後に一度だけ実行されます)、まだpageLoadイベントは更新パネルが実行されるたびに実行されます更新します。
更新パネルのポストバック中に、サーバーコードでClientScriptManagerを使用して、次のような新しいスクリプトをページに追加します。
ClientScriptManager.RegisterStartupScript(
typeof(page1),
"CssFix",
"javascriptFunctionName()",
true);
3番目の引数と一致する名前付き関数にjavascriptをカプセル化し、ポストバックが戻るときに実行する必要があります。
スクリプトマネージャーを配置したのと同じフォームにコードを追加します。
コードビハインド:
protected void Page_Load(object sender, EventArgs e)
{
if (ScriptManager1.IsInAsyncPostBack)
{
StringBuilder sb = new StringBuilder();
sb.Append("<script language='javascript' type='text/javascript'>");
sb.Append("Sys.Application.add_load(func);");
sb.Append("function func() {");
sb.Append("Sys.Application.remove_load(func);");
sb.Append("alert('I am Batman!');");
sb.Append("}");
sb.Append("</script>");
ScriptManager.RegisterStartupScript(this, GetType(), "script", sb.ToString(), false);
}
}
UpdatePanelが次のように終了するたびに、クライアント側コード(JavaScript)のイベントにバインドすることもできます。
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();});
この場合、myFunction(); UpdatePanelポストバックが発生するたびに呼び出されます。ページがロードされたときにこのコードを実行すると、関数は正しい時間に呼び出されます。