RichFaces Hotkey不适合我

时间:2014-02-20 08:57:27

标签: richfaces selector hotkeys

我无法获得丰富的内容:热键可以在richfaces中工作(版本:4.3.2)

Mainquestion :只有在显示popuppanel时,如何才能使热键正常工作。

在网站的某个点上,我会显示一个可以继续选择的popuppanel 例如(编造):

选择:

1 - 转到下一页

2 - 转到向导的开头

3 - 取消向导并转到主页

如果按'1'我想要选择第一个选项,在'2'上选择第二个选项。

到目前为止我的代码:

<h:form prependId="false" id="contentForm">
    ...
    <rich:popupPanel id="navPopup" modal="true" autosized="true" resizeable="false" styleClass="popup-panel" 
        zindex="202" domElementAttachment="parent">
        ...
        <rich:panel id="navOptions">
            <!-- this div is used to check visibility of the navpopuppanel, for the key event -->
            <script type="text/javascript">
                /* <![CDATA[ */

                    function focusPopupChoice(getal) {
                        alert(getal);
                    }

                /*]]>  */
            </script>
            <a4j:repeat value="#{cc.attrs.managedBean.navigationMenuModel.menuOptions}" var="option" id="repeat" rowKeyVar="index">
                <a4j:commandButton action="#{controllerBean.action.menuSelect(option.viewId)}" value="#{index +1} - #{option.label}" 
                    render="@form" type="button" styleClass="btn-keuze-ok" id="popupChoice" 
                    oncomplete="#{rich:component('navPopup')}.hide(); return false;" onkeypress="return submitByEnter(event)" 
                    immediate="true"/>
                <rich:hotKey enabledInInput="true" key="#{index +1}" onkeyup="focusPopupChoice(#{index +1});" preventDefault="true"/>
            </a4j:repeat>
        </rich:panel>
    </rich:popupPanel>
    ...
</h:form>

这很有效。按1-3键时我收到警报。 问题:当弹出窗口不可见时,我也会收到警报。

所以我找到了Selecter选项。所以我添加了选择

<rich:hotKey enabledInInput="true" selector="#navPopup" key="#{index +1}" onkeyup="focusPopupChoice(#{index +1});" preventDefault="true"/>

现在它不再起作用了。热键现在工作的唯一时刻是选择按钮已经聚焦/选择。当我点击页面上的任何地方(按钮除外)时,热键不再工作。

我也尝试将 selector =“#contentForm”,同样效果。

Mainquestion : 只有在显示popuppanel时,如何才能使热键正常工作。

SubQuestion : 主页面也有热键,我想在显示popuppanel时被禁用。根据我的说法,使用选择器也应该可以,如果我错了,请纠正我。

提前致谢!

1 个答案:

答案 0 :(得分:2)

它不起作用,因为hotKey(特别是keyupkeydown事件)只能处理可聚焦的元素。如果它没有聚焦,面板就不知道你正在按下它上面的按钮。

保持hotKey全局,当您处理事件时,可以检查是否显示popupPanel(JS对象的属性shown)。