RichFaces热键';他不为我工作
我很难让rich:热键在richfaces(版本:4.3.2)中按预期工作 主要问题:只有当弹出面板显示时,我才能使热键工作 在网站上的某一点上,我显示了一个popuppanel,其中包含可继续进行的选项。RichFaces热键';他不为我工作,richfaces,selector,hotkeys,Richfaces,Selector,Hotkeys,我很难让rich:热键在richfaces(版本:4.3.2)中按预期工作 主要问题:只有当弹出面板显示时,我才能使热键工作 在网站上的某一点上,我显示了一个popuppanel,其中包含可继续进行的选项。 例如(合成): 选择: 1-转到下一页 2-转到向导的开头 3-取消向导并转到主页 如果按“1”,我希望选择第一个选项,请在“2”上选择第二个选项 到目前为止,我的代码是: <h:form prependId="false" id="contentForm"> ...
例如(合成): 选择: 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时收到警报。
问题:当弹出窗口不可见时,我也会收到警报
所以我找到了选择器选项。所以我添加了选择
<rich:hotKey enabledInInput="true" selector="#navPopup" key="#{index +1}" onkeyup="focusPopupChoice(#{index +1});" preventDefault="true"/>
现在它不再工作了。热键现在唯一起作用的时刻是当选择按钮已经聚焦/选中时。当我点击页面上的任何地方(除了按钮)时,热键不再工作
我还试着把选择器=“#contentForm”,效果也一样
主要问题:
我如何才能使热键工作,只有当弹出面板显示
子问题:
主页面也有热键,我希望在显示popuppanel时禁用这些热键。根据我的说法,这也应该是可能的选择,纠正我,如果我错了
提前谢谢 它不起作用,因为热键(特别是
keyup
和keydown
事件)只能在可聚焦的元素上工作。如果没有对焦,面板不知道您正在“按”按钮
保持热键全局性,当您处理事件时,您可以检查popupPanel是否显示(JS对象的属性
show
)所以基本上我应该做:,(JS)函数checkAndDoAction(){if(panel.show()){setfocus()}不,您不需要设置焦点(而且您不能),您将使用面板。如图所示
决定调用哪个函数(全局函数或通过面板执行该操作的函数)。