PostBack之后Document.Ready()不起作用
本文关键字:不起作用 Ready 之后 Document PostBack | 更新日期: 2023-09-27 18:27:00
我有一个页面,在更新面板中包含一个用户控件。当页面首次加载时,会调用$(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/),当你有一个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。只需将回发触发器放在按钮上,它就会解决这个问题。