将 ASP.NET updatepanel 与 jQuery UI DatePicker 组合时出现奇怪的错误

2024-01-30

我创建了一个结合了内联的页面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.

[更新]蒂姆解决了它!多谢! - 也感谢所有花时间试图解决这个问题的人:)


我想您会发现 MSDN 上的这篇文章很有趣:http://msdn.microsoft.com/en-us/magazine/cc163413.aspx http://msdn.microsoft.com/en-us/magazine/cc163413.aspx

文章说“Sys.WebForms.PageRequestManager.getInstance()。添加页面已加载(" 还附加到 Updatepanel 完整事件。

每次它也会触发 异步回调启动于 代表 UpdatePanel 控件 完成以及里面的内容 UpdatePanel 已更新。

然后在你的处理程序中你可以循环遍历更新的面板

var panels = args.get_panelsUpdated();
for (i=0; i < panels.length; i++) { alert(panels[i]); }

我会避免使用 _ postBackSettings,因为“ _ ”表示隐私,并且可能会在 ASP.NET ajax 的未来版本中停止使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ASP.NET updatepanel 与 jQuery UI DatePicker 组合时出现奇怪的错误 的相关文章

  • jQuery UI 对话框 - 关闭后无法打开

    我有一个问题jquery ui dialog box https jqueryui com dialog 问题是 当我关闭对话框然后单击触发它的链接时 除非刷新页面 否则它不会再次弹出 如何在不刷新实际页面的情况下回调对话框 下面是我的代码
  • Radiobutton-带有纯 html/css 的按钮

    是否可以创建像这样的单选按钮JQuery http jqueryui com demos button radio那些 用纯html css thanks 试试这个小提琴 http jsfiddle net mcXm7 1 http jsf
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已
  • AngularJS:如何获取 $http 结果作为函数的返回值?

    在我的控制器中 我需要一个接受参数并从服务器返回 URL 的函数 像这样的东西 scope getPoster function title return http get http www omdbapi com t title y pl
  • 如何在 asp.net C# 4.0 中调用异步方法?

    我知道 net 4 5 中有await async 关键字 可以轻松调用异步方法 我目前正在研究如何在 C 4 0 中进行异步调用 我想要的一个例子是在数据网格正在进行数据绑定的情况下进行异步调用 如果您能为我提供一些链接 我将非常感激 看
  • 带有输入的动态创建行上的日期选择器

    我有一个表单可以使用输入动态创建新行 每个新行上的日期输入应该有一个日期选择器 我几乎可以正常工作 但是当创建带有输入的新行时 日期选择器将不再在已经存在的日期字段上工作 我玩了一整天来找出我做错了什么 但我就是不知道如何解决这个问题 这是
  • 如何将 jquery 应用于具有相同 id 属性的所有元素?

    如何将 jquery 应用于具有相同 id 属性的所有元素 我想申请focus and blur 函数在一个textarea具有相同 id 的元素 正确的答案是 id yourID doSomething 对于任何代码 例如
  • 如何使用jquery格式化数字

    我正在尝试删除 之后的数字 然后我想格式化数字 16810900 211233 喜欢这个 16 810 900 但我不知道该怎么做 这是我的 html 是这样的 div class main p class active 10200 00
  • 按日期对 JSON 进行排序

    我知道这一定相对简单 但我有一个 JSON 数据集 我想按日期排序 到目前为止 我每次都会遇到问题 现在我将日期存储为this lastUpdated 如果有帮助的话 我可以访问 jquery 但我意识到 sort 是本机 JS 提前致谢
  • jQuery 中如何判断 JSON 对象是否为空

    我有以下 JSON meta limit 20 next null offset 0 previous null total count 0 objects 我对对象感兴趣 我想知道对象是否为空并显示警报 像这样的东西 success fu
  • Javascript“命名空间”和 jQuery AJAX

    我正在使用此处列出的建议 http www odetocode com articles 473 aspx http www odetocode com articles 473 aspx 使用模拟的JavaScript AJAX网络聊天系
  • jQuery Masonry 和 CSS3

    如何在保持砖石布局的同时将 CSS3 过渡与当前图像结合起来 这是我的html div img class bottom src images div
  • 哪些控件触发了 Page.IsValid = false?

    两件事情 是否可以通过 Jquery 设置 Page IsValid Is Valid 属性 以便我不必使用 aspx 验证器 据我了解 IsValid 属性是只读的 当验证器进入时 是否可以通过 Jquery 当然 找出哪些控件导致验证失
  • ASP.NET中如何访问除wwwroot以外的位置

    我可以使用访问服务器的物理位置Server MapPath 这给了我内部的物理路径wwwroot文件夹 我想将一些数据保存到同一服务器的另一个驱动器中D 驾驶 我想我无法获取以下位置的物理位置D 驾驶使用Server MapPath因为它位
  • 'DOMException:使用'option:selected'选择器时无法在'Element'上执行'querySelectorAll'

    我正在运行一个页面 该页面在以下行中引发错误 var label select find option selected html select find option first html 为了完整起见 这里是完整的 jQuery 函数
  • jQuery 单击附加元素不起作用

    我有一个数组 我正在从 Array 获取数据并在 jQuery Append to list 中使用它 但是当我单击列表项时 它只显示最后一个元素 var array 1 2 7 3 4 8 5 6 9 for var i 0 i lt a
  • Request.Form 和 Request.QueryString 之间的区别?

    有人可以告诉我两者之间的确切区别吗Request Form and Request QueryString 我知道一个区别 比如 如果HTTP请求方式为POST 则用户提交的数据在申请表 收藏 如果HTTP请求方法是GET 则用户提交的数据
  • jquery 表单使用 .on() 提交

    我正在尝试发送由 jquery 创建的表单 该表单附加到一个 div 中 下面的变量 data 是使用 php 创建的 我将只发布最重要的 js 代码 我尝试了很多带有和不带 on 的方法 但我未能让警报框显示 1 以便我知道代码块实际上已
  • jQuery Draggable:可拖动框越过容器 - bug?

    Try this http jsfiddle net QhVNr code HTML div class draggable container div class draggable div class exp div div div C
  • 隔离必需的字段验证器?

    我在页面上有两个搜索按钮 一个链接到下拉列表 另一个链接到带有文本框的下拉列表以获取更多搜索条件 我在所有上述控件上都需要现场验证器 当我从第一个下拉列表中选择某些内容并单击相应的搜索按钮时 文本框的字段验证器会触发 从而禁用第一个搜索按钮

随机推荐