我正在尝试使用rich设置一个“可编辑的组合框”:select with enableManualInput =“true”。
我在处理“错误的”用户输入时遇到问题:如果用户键入的值不包含在可选择的“selectItems”列表中,我想恢复该字段的先前值。但是,在这种情况下,我无法找到一种方法来附加有效的事件处理程序(无论是javascript还是服务器端)。
<rich:select id="tracoChoice"
value="#{customerActivitiesController.selectedTraco}"
enableManualInput="true">
<f:selectItems value="#{customerActivitiesController.selectableTracos}"/>
<a4j:ajax event="change" execute="@this" listener="#{customerActivitiesController.onSelectedTracoChange}" render="currentCustomerActivity"/>
</rich:select>
如果我从下拉列表中选择一个值,则按预期调用onSelectedTracoChange()。如果我只是在输入字段中键入一个随机值(然后按ENTER或TAB),则不会调用onSelectedTracoChange。
我也尝试过valueChangeListener,但无济于事。在javascript方面,我尝试了涉及onblur和onchange的各种组合,但这些组合也用于正常值选择。我只是觉得必须有一种更简单的方式逃脱我...
答案 0 :(得分:0)
由于您在技术上没有选择任何内容,因此没有事件被解雇。
您可以简单地使用onkeyup或其他活动,但由于您需要过滤它们,因此您无法使用<a4j:ajax>
:
<a4j:ajax event="keyup" oncomplete="if (event.keyCode == 13) { resetInput(); }" />
<a4j:jsFunction name="resetInput" actionListener="#{customerActivitiesController.onSelectedTracoChange}" />
keycode 13是Enter,Tab是9
EDIT 如果你需要向服务器发送一个值,你可以这样做:
<a4j:jsFunction name="resetInput" actionListener="#{customerActivitiesController.onSelectedTracoChange}" >
<a4j:param name="input" assignTo="#{bean.value}" />
</a4j:jsFunction>
这将允许您将参数传递给该函数
resetInput(RichFaces.$(clientIdOfSelect).getInput().val())