我无法获得丰富的内容:热键可以在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时被禁用。根据我的说法,使用选择器也应该可以,如果我错了,请纠正我。
提前致谢!
答案 0 :(得分:2)
它不起作用,因为hotKey(特别是keyup
和keydown
事件)只能处理可聚焦的元素。如果它没有聚焦,面板就不知道你正在按下它上面的按钮。
保持hotKey全局,当您处理事件时,可以检查是否显示popupPanel(JS对象的属性shown
)。