如何在JSF 2 + RichFaces 4的输入字段中使用掩码?

Val*_*lva 7 jquery jsf richfaces jsf-2 input-mask

我需要在表单的输入字段中添加一些掩码.我尝试在下面的代码中插入jQuery.jsjQuery.MaskedInput.js显示:

<h:head>
    <h:outputScript name="jquery-1.6.4.min.js" library="javascript" />
    <h:outputScript name="jquery.maskedinput-1.3.js" library="javascript" />

    <script>
        jQuery(function($){
           $("#date").mask("99/99/9999");
           $("#phone").mask("(999) 999-9999");
           $("#tin").mask("99-9999999");
           $("#ssn").mask("999-99-9999");
       });
    </script>

    <title>TITLE</title>
</h:head>

<h:body>
     <h:form id="form">
        <h:inputText id= "date"  />
    </h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)

到目前为止没什么.

更新 使用BalusC,$("[id='form:phone']").mask("(99) 9999-9999");它工作正常!(多谢,伙计).但是我需要在数据表中应用这个掩码:

<script>
    jQuery(function($){
       $("input.phones").mask("(999) 999-9999");
   });
</script>

<title>TITLE</title>
Run Code Online (Sandbox Code Playgroud)

 <h:form id="form">

   <h:panelGrid columns="3">
        <h:outputLabel for="phones" value="Telefone(s) :" />                
        <h:dataTable id="phones" value="#{profile.user.userPhones}" var="item">
            <h:column>
                <h:inputText id= "phone" value="#{item.phone}" />
            </h:column>
            <h:column>
                <h:commandButton value="Remove" action="#{profile.removePhone}"/>
            </h:column>
            <h:column>
                <rich:message id="m_phone" for="phone" />
            </h:column>
        </h:dataTable>
    <h:commandButton value="Add" action="#{profile.addPhone}"/>
   </h:panelGrid>    

</h:form>
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

Bal*_*usC 7

JavaScript/jQuery在浏览器中运行,并且在由JSF生成并发送到浏览器的HTML DOM树上工作,它不拦截JSF组件树本身.您$("#date")将不返回任何内容,因为HTML DOM树中不存在具有该ID的元素.在浏览器中打开页面,右键单击" 查看源".你会发现它实际上是生成的<input id="form:date">,而不是<input id="date">.

您应该使用以下选择器(请注意,这:是CSS中的非法字符,因此应该进行转义):

$("#form\\:date").mask("99/99/9999");
$("#form\\:phone").mask("(999) 999-9999");
$("#form\\:tin").mask("99-9999999");
$("#form\\:ssn").mask("999-99-9999");
Run Code Online (Sandbox Code Playgroud)

或者,无需明确逃避:

$("[id='form:date']").mask("99/99/9999");
$("[id='form:phone']").mask("(999) 999-9999");
$("[id='form:tin']").mask("99-9999999");
$("[id='form:ssn']").mask("999-99-9999");
Run Code Online (Sandbox Code Playgroud)

或者,或者,只是给他们一个类名:

<h:inputText id="date" styleClass="date" />
<h:inputText id="phone" styleClass="phone" />
<h:inputText id="tin" styleClass="tin" />
<h:inputText id="ssn" styleClass="ssn" />
Run Code Online (Sandbox Code Playgroud)

然后可以更一般地选择如下,而不需要在视图中摆弄可能多个相同类型的输入字段的ID,例如在<h:dataTable>:

$("input.date").mask("99/99/9999");
$("input.phone").mask("(999) 999-9999");
$("input.tin").mask("99-9999999");
$("input.ssn").mask("999-99-9999");
Run Code Online (Sandbox Code Playgroud)