rich:popupPanel hide重置滚动条

时间:2012-03-20 16:41:11

标签: richfaces

我有一个带有垂直滚动条的日历视图。单击一个位置后,我会显示一个popupPanel,其中可以输入日历条目的数据。一旦调用popupPanel的hide(),主视图的滚动条就会重置为顶部。为什么呢?

我现在在打开popupPanel之前存储scrollTop并在关闭后恢复它,但这不是很漂亮,因为滚动条会闪烁。

有人建议隐藏popupPanel来触摸滚动条位置的原因吗?

示例:

<!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"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
>

<h:head>
</h:head>

<h:body>
    <a4j:log id="log" level="INFO" mode="popup" hotkey="M"/> <!-- Ctrl+Shift+M -->

    <h:form id="formId">
        Click anywhere in the div to show the popup...
        <rich:popupPanel id="popupTest" width="200" height="150" modal="true">
            <f:facet name="header">
                Popup panel test
            </f:facet>
            <f:facet name="controls">
                <h:outputLink value="#" onclick="#{rich:component('popupTest')}.hide(); return false;">X</h:outputLink>
            </f:facet>
            And here some text...<br/>
            <a href="#" onclick="#{rich:component('popupTest')}.hide(); return false;">Hide popup 1</a><br/>
            <h:outputLink value="#" onclick="#{rich:component('popupTest')}.hide(); return false;">Hide popup 2</h:outputLink><br/>
            <a href="#" onclick="console.log('click...');">Console message</a><br/>
        </rich:popupPanel>
        <div style="height:2000px; width:100px; border:1px solid green; background:grey;" onclick="#{rich:component('popupTest')}.show()"/>
    </h:form>
</h:body>

</html>

似乎浏览器处理的任何事件都会重置滚动条。与richfaces没有多大关系......但是如何处理事件包括在弹出窗口中提交值并且仍然没有重置滚动条。在onclick中添加'return false'是不可能的......

谢谢, Milo van der Zee

Richfaces-4.1,MyFaces-2.1.6

1 个答案:

答案 0 :(得分:0)

这有点奇怪(至少对我来说)。 popupPanel与包含滚动条的内容不包含在同一个div中。奇怪的是,弹出窗口关闭后立即重置滚动条。

当我添加一个包含div的位置绝对跨越整个页面(左,右,上,下全部设置为0)时,另一个div的滚动条未被触及:)

我可以想到弹出窗口会创建一个div然后再将其删除。可能是因为浏览器被迫渲染不需要渲染的部分屏幕。猜猜......

MAG, 米洛