cwa*_*wap 8 asp.net ajax jquery quirks-mode
我创建了一个结合了内联jQuery UI datepicker的页面.当用户单击新日期以更新某些数据时,我不想发起对updatepanel的回调.现在,这个页面有多个updatepanels(不要问:)),所以我需要检查哪个updatepanel重新加载,以便做一些客户端的东西.我正在使用__doPostBack回发并Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {}在更新完成时进行监听.
问题是在FF中,回调告诉我它不是异步操作,我需要检查哪个更新面板将更新设置为null.
我的问题是,这在IE中运行良好,但在任何其他浏览器中都没有,这可能是由两件事造成的:IE进入一个解决问题的怪癖模式(这是我的想法)或IE有某种本机支持对于其他浏览器不知道的updatepanel.
我把问题缩小了,并制作了一个测试页:
<!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>
Run Code Online (Sandbox Code Playgroud)
在IE中启动此测试页将导致一个消息框显示它应该是什么,而在FF或Chrome中加载它会导致消息框显示"null":)
我已经尝试了各种各样的东西,但我不确定是什么原因可能导致这种行为,因为我并没有真正深入到jQuery或ASP.NET Ajax的内部工作中.但是,如果我在FireBug中逐步执行代码的速度足够有效......这让我觉得jQuery回调和ASP.NET Ajax回调之间的互操作性可能存在问题?
任何帮助或想法将受到高度赞赏.
谢谢.
[更新]蒂姆解决了它!非常感谢! - 还要感谢所有花时间试图解决这个问题的人:)
我想您会发现 MSDN 上的这篇文章很有趣:http://msdn.microsoft.com/en-us/magazine/cc163413.aspx
文章说“Sys.WebForms.PageRequestManager.getInstance(). add_pageLoaded (”也附加到Updatepanel完成事件。
每次代表 UpdatePanel 控件启动的异步回调完成并且 UpdatePanel 内的内容更新时,它也会触发。
然后在你的处理程序中你可以循环更新面板
var panels = args.get_panelsUpdated();
for (i=0; i < panels.length; i++) { alert(panels[i]); }
Run Code Online (Sandbox Code Playgroud)
我会避免使用 _ postBackSettings,因为“ _ ”表示隐私,并且可能会在 ASP.NET ajax 的未来版本中停止使用。
| 归档时间: |
|
| 查看次数: |
3832 次 |
| 最近记录: |