Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSF验证onblur会导致下一个字段聚焦并失效吗?_Javascript_Jquery_Jsf 2 - Fatal编程技术网

Javascript JSF验证onblur会导致下一个字段聚焦并失效吗?

Javascript JSF验证onblur会导致下一个字段聚焦并失效吗?,javascript,jquery,jsf-2,Javascript,Jquery,Jsf 2,在JSF 2.0中,具有以下功能: 这样可以聚焦并突出显示无效字段。但是,它也允许用户切换到下一个输入字段。因此,顺序是: 用户单击另一个字段或选项卡时,不会在字段中输入任何数据或无效数据 浏览者关注的是另一个领域 原始字段上的on模糊触发导致ajax 失效发生,类被添加到输入中。执行JS函数时,会将焦点带回无效字段。在这之前一切都很好 但是,现在第二场的onBlur再次开火,导致整个事件再次发生 潜在解决方案: 我可以看到,的OneEvent函数被调用了3次。一次代表开始,一次代表成功,一次代

在JSF 2.0中,具有以下功能:

这样可以聚焦并突出显示无效字段。但是,它也允许用户切换到下一个输入字段。因此,顺序是:

  • 用户单击另一个字段或选项卡时,不会在字段中输入任何数据或无效数据
  • 浏览者关注的是另一个领域
  • 原始字段上的on模糊触发导致ajax
  • 失效发生,类被添加到输入中。执行JS函数时,会将焦点带回无效字段。在这之前一切都很好
  • 但是,现在第二场的onBlur再次开火,导致整个事件再次发生 潜在解决方案: 我可以看到,的OneEvent函数被调用了3次。一次代表开始,一次代表成功,一次代表完成。我想我能做的就是在最后一次执行javascript事件之前,对所有其他输入字段禁用模糊事件


    关于我如何才能做到这一点的建议?

    我知道这让您感到不安,显然您希望一次只显示一条消息。但这也会干扰最终用户,光标不再停留在下一个字段中,最终用户被迫立即纠正上一个字段的验证错误,并且没有任何借口!也许最终用户希望在填写数据之前有更多的时间考虑数据?当你遇到这种形式时,你会有什么感觉?也许你不应该改变焦点?也许只要按下真正的提交按钮,您就应该将焦点更改为第一个无效字段

    然而,这是一个有趣的问题。您确实可以钩住
    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();
    }