更新パネル内にユーザーコントロールを含むページがあります。 $(document).ready(function() ) {
が呼び出され、ページが最初にロードされたときにコードを正しく実行しますが、ユーザーが(ユーザーコントロール内で)ボタンをクリックしても、document.ready()
は呼び出されません(document.load
、onload
も機能しません)
私はこれをネット上で調査しましたが、同様の問題を発見しましたが、なぜこれが機能しないのかを説明することはできません。 document.ready
が機能しない他の原因は何ですか?
これは partial postback で問題になります。 DOMはリロードされないため、ドキュメント準備機能は再びヒットしません。 JavaScriptで次のように部分的なポストバックハンドラーを割り当てる必要があります。
function doSomething() {
//whatever you want to do on partial postback
}
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(doSomething);
上記のadd_endRequest
の呼び出しは、ページが最初にロードされたときに実行されるJavaScriptに配置する必要があります。
$(document).ready
の代わりにfunction pageLoad(){}
を使用できます。
ポストバック時でも、ページ上のScriptManager
によって自動的に呼び出されます。
El Ronnocoが言ったように、DOMがリロードされないようにする必要があります。ただし、単に$(document).ready(function() {
を次のように変更できます。
Sys.Application.add_load(function() {
これにより、すべてのポストバックで強制的に実行されます。
関数pageLoad()も使用できますが、pageLoad関数は1つしか持てませんが、Sys.Application.add_loadでは、必要な数のハンドラーを追加できます。
最も良い方法は
<asp:UpdatePanel...
<ContentTemplate
<script type="text/javascript">
Sys.Application.add_load(LoadScript);
</script>
you hemla code gose here
</ContentTemplate>
</asp:UpdatePanel>
Javascript関数
<script type="text/javascript">
function LoadScript() {
$(document).ready(function() {
//you code gose here
});
}
</script>
または
UpdatePanelの下で、次を使用してクライアントスクリプトを再度登録する必要がある
ScriptManager.RegisterClientScript
または
$(document).ready(function() {
// bind your jQuery events here initially
});
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function() {
// re-bind your jQuery events here
loadscript();
});
$(document).ready(loadscript);
function loadscript()
{
//yourcode
}
これは過去に私のために働いた例です:
<script>
function MyFunction(){
$("#id").text("TESTING");
}
//Calling MyFunction when document is ready (Page loaded first time)
$(document).ready(MyFunction);
//Calling MyFunction when the page is doing postback (asp.net)
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(MyFunction);
</script>
以下のコードは、この問題を解決するためにうまく機能します。前に投稿されたリンクに示されているように( http://encosia.com/document-ready-and-pageload-are-not-the-same/ )、updatePanelsでasp.NETがある場合関数pageLoad()を使用します。ページが1つしかない場合、各ポストバックで完全にリロードされるため、$(document).ready()が適切なオプションです。
PageLoadを使用した例:
function pageLoad() {
$(".alteraSoVirgula").keyup(function () {
code here
})
}
私も同じ問題に直面していましたが、ページの読み込み時にjQuery $(document).readyイベントハンドラーが動作することを発見しましたが、ASP.Net AJAX UpdatePanel Partial PostBackの後は呼び出されません。 $(document).readyの代わりにSys.Application.add_load(function(){});を使用してください。これは私にとって完璧に機能します:)
<script>
Sys.Application.add_load(function() { //Your code }); </script>