按下向上或向下箭头键时,SelectOneMenu激活ajax

时间:2015-02-10 14:15:14

标签: ajax jsf

当我专注于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键触发它。

1 个答案:

答案 0 :(得分:1)

只需将f:ajax的事件更改为keyupchange事件就不会发送任何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>