PostBack之后Document.Ready()不起作用

本文关键字:不起作用 Ready 之后 Document PostBack | 更新日期: 2023-09-27 18:27:00

我有一个页面,在更新面板中包含一个用户控件。当页面首次加载时,会调用$(document).ready(function() ) {并正确执行代码,但如果用户单击按钮(在用户控制范围内),则不会调用document.ready()document.loadonload也不工作)

我在网上对此进行了研究,发现了类似的问题,但没有什么可以解释为什么这不起作用。document.ready不工作还有什么其他原因?

PostBack之后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/),当你有一个asp。NET的updatePanels,您应该使用函数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。只需将回发触发器放在按钮上,它就会解决这个问题。