8

フォームの入力フィールドにいくつかのマスクを含める必要があります。以下のコードに示すように、jQuery.jsとを挿入しようとしています。jQuery.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>

今のところ何もしません。

更新 BalusCを使用すると、正常$("[id='form:phone']").mask("(99) 9999-9999");に動作します。(ありがとう、相棒)。しかし、私はこのマスクをデータテーブルに適用する必要があります:

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

<title>TITLE</title>

 <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>

何か案が ?

4

2 に答える 2

8

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");

または、明示的なエスケープを必要とせずに:

$("[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");

または、代わりに、クラス名を付けるだけです。

<h:inputText id="date" styleClass="date" />
<h:inputText id="phone" styleClass="phone" />
<h:inputText id="tin" styleClass="tin" />
<h:inputText id="ssn" styleClass="ssn" />

これは、ビュー内など、ビュー内の同じタイプの複数の入力フィールドの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");
于 2011-10-25T00:39:19.337 に答える
0

JSFとRichFacesを使用して、次のような競合マスクを解決することができました。

var $j = jQuery.noConflict();

window.onload = function () {
    $j(#{rich:element('parProcecessoNumProtocolo')}).mask('9999.999999/9999-99');
}
于 2014-11-25T15:01:47.373 に答える