【问题标题】:Primefaces: autocomplete panel often not displayed in IEPrimefaces:自动完成面板通常不显示在 IE 中
【发布时间】:2013-01-31 15:19:20
【问题描述】:

我们的 PrimeFaces 3.4 应用程序运行良好,直到在 firefox 下进行了测试。但是,去测试之后,问题就出现了:

  • 应用程序将仅在 IE 中启动 (IE 9)
  • 应用程序在 frameset 内启动

我们在很多地方都使用p:autocomplete,包括对话框。在以下情况下,这些自动完成的面板通常不会在单击后显示:

  • 在框架集内运行(在正常模式下很少发生)
  • IE 开发人员工具已关闭(打开时很少发生,导致错误难以调试)
  • 浏览器窗口未最大化

最后一点是我们观察的关键。解决方案是最大化浏览器(这可以工作,因为我们有大屏幕)或缩小内容。因此,我怀疑这是计算必须显示自动完成面板的位置的问题。该算法必须考虑几个条件,例如是否定位父级(对话框:位置固定),如果有滚动,偏移量是多少 - 这里的帧可能会搞砸一些事情。

但是,调试几乎不是一种选择,首先是因为没有官方的非最小化 primefaces.js,其次是因为打开 IE 开发人员工具会以某种方式阻止错误的发生。

在这种情况下,我想问自动完成是如何表现的,以及它如何受到拼图的任何元素的影响:框架集、对话框、IE 开发工具?

【问题讨论】:

  • 您所说的开发人员工具表明代码中有杂散的console.log() 调用。当开发者控制台未打开时,这些可能会导致问题。
  • 但控制台并非如此,无论如何,没有ie开发工具的屏幕最大化在“对抗”错误方面更有效

标签: javascript internet-explorer autocomplete primefaces frame


【解决方案1】:

相关:IE8 and Primefaces p:selectOneMenu misbehave when having a lots of p:selectOneMenu in a form

问题在于 PrimeFaces 依赖visibility:hidden 进行大量维度计算。当不可见的组件超出页面边界时,IE 并没有按预期计算尺寸。我没有详细介绍 PrimeFaces 渲染引擎,但只需激活 always 滚动即可解决问题:

body { overflow-y:scroll; }

这回答了为什么在使用框架集(较少的地方)时经常会出现问题或为什么最大化浏览器会有所帮助的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多