在JSF 2.0中有以下内容:Using this as a base
<h:inputText id="email" size="60" label="Email"
styleClass=" #{component.valid ? '' : 'input-error'}"
value="#{familyBacking.family.email}" requiredMessage="Required">
<f:validateRequired />
<f:attribute name="family" value="#{familyBacking.family}" />
<f:validator validatorId="EmailValidator" />
<f:validator validatorId="ExistingEmailAddressValidator" />
<f:ajax event="blur" onevent="updateFocus"
render="email emailMessage" />
</h:inputText>
使用javascript函数
function updateFocus(obj) {
jQuery(":input.input-error:first").focus();
}
这具有聚焦和突出显示无效字段的效果。但是,它还允许此人切换到下一个输入字段。所以,顺序是:
我可以看到&lt; f:ajax /&gt;的一个函数被称为3次。一次开始,一次成功,一次完成。我想我可以做的是以某种方式禁用所有其他输入字段的模糊事件,直到我在上次执行javascript事件时重新启用它们。
关于我如何能够实现这一目标的建议?
答案 0 :(得分:1)
我明白这对你很不安,显然你想一次只显示一条消息。但这对最终用户来说也是令人不安的,光标不再粘在下一个字段中,最终用户强制正确地纠正前一个字段的验证错误而没有任何借口! 也许最终用户在填写数据之前还需要更多时间来考虑数据?当你遇到这样的表格时,你会有什么感受?也许你应该不改变焦点?也许你应该只在按下真实的提交按钮时将焦点改为第一个无效字段?
尽管如此,这是一个有趣的问题。您确实可以挂钩onevent
的{{1}}属性来拦截ajax请求的状态。您确实可以使用jQuery魔法来禁用(实际上,删除)<f:ajax>
处理程序,然后在JSF完成其ajax作业时再次添加它(并且您已经完成了焦点工作)。您可以使用jQuery.data()
来存储和检索任意HTML元素信息,例如原始onblur
处理程序(就像您在JSF世界中使用onblur
那样):
<f:attribute>