PostBack后Document.Ready()无效

时间:2012-03-06 15:40:37

标签: c# javascript jquery asp.net user-controls

我有一个页面,其中包含更新面板中的用户控件。调用$(document).ready(function() ) {并在页面第一次加载时正确执行代码,但如果用户单击按钮(在用户控件中),则document.ready()不会被调用(document.load,{ {1}}也不起作用)

我在网上研究了这个并发现了类似的问题,但没有什么可以解释为什么这不起作用。 onload无法正常工作的其他原因是什么?

9 个答案:

答案 0 :(得分:44)

这将是partial postback的问题。 DOM不会重新加载,因此不会再次命中文档就绪函数。您需要在JavaScript中分配部分回发处理程序,如此...

function doSomething() {
   //whatever you want to do on partial postback
}

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(doSomething);

以上对add_endRequest的调用应该放在首次加载页面时执行的JavaScript中。

答案 1 :(得分:26)

而不是$(document).ready,您可以使用function pageLoad(){}

它会在页面上由ScriptManager自动调用,即使是在回发中也是如此。

答案 2 :(得分:15)

我刚刚遇到过这个问题,正如El Ronnoco所说,它必须与DOM没有重新加载。但是你可以简单地改变 $(document).ready(function() {

Sys.Application.add_load(function() {

这会强制它在每次回发时运行。

您也可以使用函数pageLoad(),但是您只能有一个pageLoad函数,而使用Sys.Application.add_load,您可以根据需要添加任意数量的处理程序。

答案 3 :(得分:10)

Bestest方式是

<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 
}

答案 4 :(得分:3)

这是一个过去对我有用的例子:

<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>

答案 5 :(得分:1)

以下代码可以很好地解决这个问题。正如之前发布的链接(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
        })
    }

答案 6 :(得分:0)

我也遇到了同样的问题,但我发现jQuery $(document).ready事件处理程序在页面加载时有效,但是在ASP.Net AJAX UpdatePanel Partial PostBack之后它没有被调用。所以使用Sys.Application.add_load(function(){});而不是$(文件).ready。 这对我来说很完美:)

<script>
Sys.Application.add_load(function() { //Your code }); </script>

答案 7 :(得分:0)

$(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
}

答案 8 :(得分:-2)

大多数情况下,由于Updatepanel而发生这种情况。 只需将回发触发器添加到按钮即可解决此问题。