Javascript 马斯金普顿';在JSF中提交表单后不能工作

Javascript 马斯金普顿';在JSF中提交表单后不能工作,javascript,validation,jsf,jsf-2,maskedinput,Javascript,Validation,Jsf,Jsf 2,Maskedinput,我有一个maskinput定义: <ui:define name="additional-javascript"> <h:outputScript name="jquery.maskedinput-1.3.min.js" library="javascript" /> <script> jQuery(function($){ $("[id='register_form:cnpj']").mask(

我有一个maskinput定义:

<ui:define name="additional-javascript">
    <h:outputScript name="jquery.maskedinput-1.3.min.js" library="javascript" />
    <script>
            jQuery(function($){
            $("[id='register_form:cnpj']").mask("99.999.999/9999-99");
        });
    </script> 
</ui:define>

jQuery(函数($){
$(“[id='register_form:cnpj']”)掩码(“99.999.999/9999-99”);
});
以这种形式:

<h:form id="register_form">
    <div class="four columns alpha">
        CNPJ : <h:message id="m_cnpj" for="cnpj" styleClass="red" />
        <h:inputText id="cnpj" value="#{clientec.cb.cliente.cnpj}" styleClass="cnpj">
            <f:ajax event="blur" render="m_cnpj" />
        </h:inputText>
    </div>
   <div class="twelve columns alpha"></div>
   //.. other input fields
</h:form>

CNPJ:
//.. 其他输入字段
这很好,但如果用户在表单中填写错误并提交,则此输入字段中的掩码将不再起作用

为什么呢?
有人知道为什么吗?这对我来说似乎有点奇怪,因为HTML在提交表单后不会改变任何东西。

如果表单提交时重新呈现输入组件本身,就会发生这种情况。重新呈现将导致HTML DOM中的原始HTML元素被ajax响应中的新HTML元素替换。即使它们可能表示完全相同的内容,新的HTML元素也不再附加jQuery掩码。基本上,您需要在其上重新执行jQuery掩码。但是,您声明的jQuery函数只在DOM就绪(页面加载)时运行。它不会在后续ajax请求上重新执行

您基本上有两种选择:

  • 不要在表单提交的重新呈现中包含输入组件。例如,让表单提交仅重新呈现消息组件,而不是
    @form

    <h:form>
        <h:inputText id="input1" ... />
        <h:message id="m_input1" ... />
        <h:inputText id="input2" ... />
        <h:message id="m_input2" ... />
        <h:inputText id="input3" ... />
        <h:message id="m_input3" ... />
        <h:commandButton ...>
            <f:ajax ... render="m_input1 m_input2 m_input3" />
        </h:commandButton>
    </h:form>
    
    或者定义一个在complete上运行的JSF ajax事件处理程序,并将其挂接到
    。例如

    <f:ajax ... render="@form" onevent="function(data) { if (data.status == 'success') applyMask() }" />
    
    
    

  • 非常感谢Bauke,我选择了2种方法。谢谢
    <f:ajax ... render="@form" onevent="function(data) { if (data.status == 'success') applyMask() }" />