代码之家  ›  专栏  ›  技术社区  ›  W vd L

RichFaces热键不适合我

  •  1
  • W vd L  · 技术社区  · 11 年前

    我很难让富:热键按富脸中的预期工作(版本:4.3.2)

    主要问题 :只有当弹出面板显示时,我才能使热键工作。

    在网站上的某个点上,我展示了一个弹出面板,其中包含继续进行的选择。
    例如(组成):

    选择:

    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” ,效果相同。

    主要问题 : 只有在弹出面板显示时,我才能使热键工作。

    子问题 : 主页也有热键,当弹出面板显示时,我想禁用热键。根据我的说法,这也可以用选择器,如果我错了,请纠正我。

    提前感谢!

    1 回复  |  直到 11 年前
        1
  •  2
  •   Makhiel    11 年前

    它不起作用,因为热键(特别是 keyup keydown 事件)只能在可聚焦的元素上工作。如果没有聚焦,面板就不知道你在“按下”按钮。

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