当我专注于selectOneMenu时,当我点击向上箭头键或向下箭头键时,我需要触发一个ajax调用。
这是我的代码,我首先尝试使用up键(它不工作,我尝试了几种变体)
<h:selectOneMenu id="id" disabled="#!Bean.disabled}" value="#{Bean.value}" styleClass="style" onkeypress="if (event.keyCode == 38) { onchange(); return false; }">
<f:selectItems id="idItem" value="#{Bean.options}" var="option" />
<f:ajax event="change" execute="@this" render="group"/>
</h:selectOneMenu>
提示:Tab键正在触发并移动焦点(如果值已更改)。我不希望tab键触发它。
答案 0 :(得分:1)
只需将f:ajax
的事件更改为keyup
,change
事件就不会发送任何ajax请求,除非selectOneMenu
失去焦点(这也是通过提示确认&#34; Tab键正在触发并移动焦点&#34;)。
这将是这样的:
<f:ajax event="keyup" execute="@this" render="group"/>
我在BalusC的评论之后更新了我的答案,即只有在触发向上键或向下键时才要触发ajax请求,所以我建议你直接调用{{1}的javascript函数在幕后进行调用,因此您可以添加对f:ajax
函数的直接调用,您可以找到有关该函数here的更多信息。
为了使用该方法,您必须在XHTML文件中添加JSF的内置JavaScript库,如下所示:
jsf.ajax.request(source, event, options)
然后改变你的代码:
<h:outputScript library="javax.faces" name="jsf.js"/>
注意:请注意,在<h:selectOneMenu id="id" disabled="#!Bean.disabled}" value="#{Bean.value}" styleClass="style"
onkeyup="if (event.keyCode == 38 || event.keyCode == 40) { jsf.ajax.request(this, event, { render: 'form:group'}); return false;}">
<f:selectItems id="idItem" value="#{Bean.options}" var="option" />
</h:selectOneMenu>
的{{1}}选项中,我指定了要呈现的组件的确切render
,而不仅仅是组件ID(jsf.ajax.request()
此处为ClientID
的ID),如果您只想使用ID form
,则必须将h:form
添加到group
。< / p>