我创建了一个结合了内联的页面jQuery UI 日期选择器 http://docs.jquery.com/UI/Datepicker。当用户单击新日期来更新某些数据时,我不想启动对更新面板的回调。现在,此页面有多个更新面板(不要问:)),因此我需要检查哪个更新面板进行了重新加载,以便在客户端执行一些操作。我在用着__doPostBack
进行回发和Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {}
监听更新何时完成。
问题是,在 FF 中,回调告诉我这不是异步操作,并且我需要检查哪个 updatepanel 进行了更新的数据设置为 null。
我的问题是,这在 IE 中工作正常,但在任何其他浏览器中不起作用,这可能是由两件事引起的:IE 进入解决问题的怪异模式(这就是我的想法)或者 IE 有某种本机支持对于其他浏览器没有的更新面板。
我已经缩小了问题范围,并生成了一个测试页:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js "></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js "></script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript">
function doAspNetPostback() {
__doPostBack('<%= hiddenOnSelectionChangedButton.ClientID %>', '');
}
$(document).ready(function() {
/* Create the datepicker */
buildDatepicker();
/* Add callback-method for when the scriptmanager finished a request */
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {
/* Show the panelID - This is 'upd1|hiddenOnSelectionChangedButton' in IE as it should be, and null in Chrome / FF */
alert(sender._postBackSettings.panelID);
});
});
function buildDatepicker() {
var dp = $("#datepicker").datepicker({
onSelect: function(dateText, inst) {
/* Do a postback when someone clicks a date */
doAspNetPostback();
}
});
}
</script>
<div id="datepicker">
</div>
<asp:UpdatePanel UpdateMode="Conditional" ID="upd1" runat="server">
<ContentTemplate>
<asp:Button ID="hiddenOnSelectionChangedButton" Text="Press me" runat="server" />
<div id="lala" runat="server">
Upd1
</div>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
在 IE 中启动此测试页面将导致一个消息框显示其应有的内容,而在 FF 或 Chrome 中加载它会导致一个消息框显示“null”:)
我尝试了各种各样的方法,但我不确定什么会导致这种行为,因为我并没有真正深入了解 jQuery 或 ASP.NET Ajax 的内部工作原理。但是,如果我在 FireBug 中单步执行代码的速度足够慢,它就可以工作......这让我认为这可能是 jQuery 回调和 ASP.NET Ajax 回调之间的互操作性问题?
任何帮助或想法将不胜感激。
Thanks.
[更新]蒂姆解决了它!多谢! - 也感谢所有花时间试图解决这个问题的人:)