【问题标题】:Updatepanel refresh messing up JqueryUI in IE7Updatepanel 刷新弄乱了 IE7 中的 JqueryUI
【发布时间】:2010-04-19 00:57:25
【问题描述】:

这有点远,因为我目前无法访问代码。但是,代码并没有什么“特别”之处。我正在使用 JqueryUI 和 ASP.NET UpdatePanel 的组合。如果我单击任何trigger 控件(asp.net 按钮),则部分回发很好。但是,如果我在单击 JQueryUI 按钮后单击 trigger 控件,那么整个布局就会混乱,并且很多内容会向上移动。我几乎可以到达一个 JQueryUI 按钮,当我单击它时,布局恢复正常,一切都很好,直到我再次单击触发器控件。该页面在所有最新浏览器中都能正常工作,但在 IE 7 中出现此问题。

我希望也许有人在 IE 7 中遇到过类似的问题并找到了解决方法/解决方案。我一直在尝试修复它几天,但没有运气。

感谢您的建议。

【问题讨论】:

  • 你有这个网址让我看看吗?
  • 对不起,它还没有在生产服务器上。

标签: asp.net jquery jquery-ui internet-explorer-7 updatepanel


【解决方案1】:

当 UpdatePanel 刷新时,它会破坏其边界内的 DOM 对象并将其替换为新对象(即使该内容可能是相同或相似的标记)。任何附加到旧 DOM 元素的 JavaScript 现在都持有对不存在对象的引用。如果 jQuery 代码能优雅地处理这个问题,事情就会停止工作;或更糟(如您所见)不可预测且不稳定的行为。

我找到的解决方案是获取 UpdatePanel 的 beginRequest 事件并在所有 jQueryUI 对象上调用 destroy();并在 endRequest 事件中通过重新运行所有选择器并重新创建 jQueryUI 对象来重新创建它们。

<script type="text/javascript">

    function createJQueryObjects() {
        //setup
    }

    function destroyJQueryObjects() {
        //destroy
    }
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(destroyJQueryObjects);
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(createJQueryObjects);
</script>

【讨论】:

  • 现在我明白为什么开发人员对 IE 充满热情 :D。谢谢 Rex,我明天试试,如果成功了再告诉你。
  • 谢谢 Rex,我设法解决了这个问题。事实证明这是几件事的结合,但我必须像你建议的那样销毁然后重新创建,否则 jquery 在回发后停止工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2013-12-20
  • 2020-01-16
  • 1970-01-01
相关资源
最近更新 更多