Javascript JSF验证onblur会导致下一个字段聚焦并失效吗?
在JSF 2.0中,具有以下功能: 这样可以聚焦并突出显示无效字段。但是,它也允许用户切换到下一个输入字段。因此,顺序是:Javascript JSF验证onblur会导致下一个字段聚焦并失效吗?,javascript,jquery,jsf-2,Javascript,Jquery,Jsf 2,在JSF 2.0中,具有以下功能: 这样可以聚焦并突出显示无效字段。但是,它也允许用户切换到下一个输入字段。因此,顺序是: 用户单击另一个字段或选项卡时,不会在字段中输入任何数据或无效数据 浏览者关注的是另一个领域 原始字段上的on模糊触发导致ajax 失效发生,类被添加到输入中。执行JS函数时,会将焦点带回无效字段。在这之前一切都很好 但是,现在第二场的onBlur再次开火,导致整个事件再次发生 潜在解决方案: 我可以看到,的OneEvent函数被调用了3次。一次代表开始,一次代表成功,一次代
关于我如何才能做到这一点的建议?我知道这让您感到不安,显然您希望一次只显示一条消息。但这也会干扰最终用户,光标不再停留在下一个字段中,最终用户被迫立即纠正上一个字段的验证错误,并且没有任何借口!也许最终用户希望在填写数据之前有更多的时间考虑数据?当你遇到这种形式时,你会有什么感觉?也许你不应该改变焦点?也许只要按下真正的提交按钮,您就应该将焦点更改为第一个无效字段 然而,这是一个有趣的问题。您确实可以钩住
的onevent
属性来拦截ajax请求的状态。您确实可以使用jQuery魔法禁用(实际上是删除)onblur处理程序,然后在JSF完成ajax工作(您也完成了焦点工作)后再次添加它。您可以使用来存储和检索仲裁HTML元素信息,如原始的onblur
处理程序(类似于JSF world中的
处理程序):
功能过程(数据){
开关(数据状态){
案例“开始”:
jQuery(“:input”,data.source.form).not(data.source).each(function(){
var$this=$(this);
$this.data(“onblur”)、$this.attr(“onblur”);
$this.removeAttr(“onblur”);
});
打破
“成功”案例:
jQuery(“:input.input error:first”).focus();
jQuery(“:input”,data.source.form).not(data.source).each(function(){
var$this=$(this);
$this.attr('onblur',$this.data('onblur');
$this.removeData(“onblur”);
});
打破
}
}
<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>
function updateFocus(obj) {
jQuery(":input.input-error:first").focus();
}