Как использовать маску в поле ввода в JSF 2 + RichFaces 4? - PullRequest
7 голосов
/ 25 октября 2011

Мне нужно иметь несколько масок в моих полях ввода в моей форме.Я пытаюсь вставить 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>

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 25 октября 2011

JavaScript / jQuery запускается в браузере и работает с деревом HTML DOM, которое генерируется JSF и отправляется в браузер, но не перехватывает само дерево компонентов JSF.Ваш $("#date") ничего не вернет, так как в HTML-дереве DOM не существует элемента с таким идентификатором.Откройте страницу в браузере, щелкните правой кнопкой мыши и Просмотр источника .Вы увидите, что он был сгенерирован как <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" />

, которое затем может быть выбрано более общим образом следующим образом без необходимости возиться с идентификаторами, возможно, нескольких полей вводатот же тип в представлении, например, внутри <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");
0 голосов
/ 25 ноября 2014

Используя JSF и RichFaces, мне удалось решить конфликтные маски следующим образом:

var $j = jQuery.noConflict();

window.onload = function () {
    $j(#{rich:element('parProcecessoNumProtocolo')}).mask('9999.999999/9999-99');
}
...