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