[英]Document.Ready() is not working after PostBack
我有一個頁面,其中包含更新面板中的用戶控件。 $(document).ready(function() ) {
在頁面首次加載時被調用並正確執行代碼,但如果用戶單擊按鈕(在用戶控件內),則不會調用document.ready()
( document.load
, onload
也不起作用)
我在網上對此進行了研究並發現了類似的問題,但沒有任何內容可以解釋為什么這不起作用。 document.ready
不工作還有哪些其他原因?
這將是部分回發的問題。 DOM 不會重新加載,因此文檔就緒函數不會再次被觸發。 您需要像這樣在 JavaScript 中分配一個部分回發處理程序......
function doSomething() {
//whatever you want to do on partial postback
}
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(doSomething);
上面對add_endRequest
調用應該放在頁面第一次加載時執行的 JavaScript 中。
您可以使用function pageLoad(){}
代替$(document).ready
。
它由ScriptManager
在頁面上自動調用,即使在回發時也是如此。
正如 El Ronnoco 所說,我不久前遇到過這個問題,它必須與 DOM 不重新加載。 但是,您可以簡單地將$(document).ready(function() {
更改為
Sys.Application.add_load(function() {
這將強制它在每次回發時運行。
您也可以使用 pageLoad() 函數,但您只能有一個 pageLoad 函數,而使用 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()。 當您只有一頁並且在每次回發時它將完全重新加載, $(document).ready() 是正確的選擇。
使用 pageLoad 的示例:
function pageLoad() {
$(".alteraSoVirgula").keyup(function () {
code here
})
}
我也面臨同樣的問題,但我發現 jQuery $(document).ready 事件處理程序在頁面加載時工作,但在 ASP.Net AJAX UpdatePanel Partial PostBack 之后它不會被調用。 所以使用 Sys.Application.add_load(function(){}); 而不是 $(document).ready。 這對我來說非常有效:)
<script>
Sys.Application.add_load(function() { //Your code }); </script>
$(document).ready(function () {
PreRoles();
});
//On UpdatePanel Refresh
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm != null) {
prm.add_endRequest(function (sender, e) {
if (sender._postBackSettings.panelsToUpdate != null) {
PreRoles();
}
});
};
function PreRoles() {
// Add codes that should be called on postback
}
大多數情況下,這是由於 Updatepanle 而發生的。 只需將回發觸發器放在按鈕上即可解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.