【发布时间】:2009-09-10 18:10:45
【问题描述】:
我创建了一个结合了内联 jQuery UI datepicker 的页面。当用户单击新日期以更新某些数据时,我不想启动对更新面板的回调。现在,这个页面有多个更新面板(不要问:)),所以我需要检查哪个更新面板进行了重新加载,以便在客户端做一些事情。我使用__doPostBack 进行回发,使用Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {} 监听更新何时完成。
问题在于,在 FF 中,回调告诉我它不是异步操作,并且我需要检查哪个更新面板进行了更新的数据设置为 null。
我的问题是这在 IE 中可以正常工作,但在任何其他浏览器中都不能,这可能是由 2 件事引起的: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 回调之间的互操作性问题?
我们将不胜感激任何帮助或想法。
谢谢。
[更新] 蒂姆解决了它!非常感谢! - 还要感谢所有花时间试图解决这个问题的人:)
【问题讨论】:
标签: jquery asp.net ajax quirks-mode