簡體   English   中英

回發后 Document.Ready() 不起作用

[英]Document.Ready() is not working after PostBack

我有一個頁面,其中包含更新面板中的用戶控件。 $(document).ready(function() ) {在頁面首次加載時被調用並正確執行代碼,但如果用戶單擊按鈕(在用戶控件內),則不會調用document.ready() ( document.loadonload也不起作用)

我在網上對此進行了研究並發現了類似的問題,但沒有任何內容可以解釋為什么這不起作用。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM