Для этого вы можете использовать директиву с обработкой событий.
Updated Fiddle
К ключевым изменениям относятся следующие:
1) Загрузите jQuery в свою скрипку до углового, чтобы получить доступ к селекторам jQuery внутри угловых функций.
2) Оберните свои входы в контейнер с соответствующей директивой (Примечание: это также можно сделать с помощью одного элемента restrict: "A"
вместо template
и использовать input
свойство для определения дочернего HTML)
3) Управляйте input
событием на входах, и если длина превышает значение в maxlength
свойстве, сфокусируйте следующий вход. Это очень просто с jQuery, но можно сделать без него, если вы действительно этого захотите.
4) Есть миллионы способов сделать проверку на входах, но я включил простой метод.
HTML
<div phone-input>
<input type="text" value="" maxlength="3" class="area-code input-mini aid-primary-phone1-lbl"
aria-label="Primary contact number" pattern="^[0-9]{3}$">
<input type="text" value="" maxlength="3" class="area-code input-mini aid-primary-phone2-lbl"
aria-label="Primary contact number" pattern="^[0-9]{3}$">
<input type="text" value="" maxlength="4" class="area-code input-mini aid-primary-phone3-lbl"
aria-label="Primary contact number" pattern="^[0-9]{4}$">
</div>
Угловая директива
.directive("phoneInput", function () {
return {
restrict: "A",
link: function (scope, element, attrs) {
function checkForErrors(input) {
var errors = "";
if (!new RegExp(input.attr("pattern")).test(input.val())) {
errors += `Field must contain ${input.attr("maxlength")} numbers!
`;
}
return errors;
}
element.on("input", "input", function () {
var trigger = $(this);
if (trigger.val().length >= trigger.attr("maxlength")) {
trigger.blur().next().focus();
}
});
element.on("blur", "input", function () {
var trigger = $(this);
var errors = checkForErrors(trigger);
trigger.attr("title", errors);
if (trigger.val().trim() === "") {
trigger.addClass("invalid-field");
trigger.attr("title", "Field cannot be empty!");
}
else if (errors === "") {
trigger.removeClass("invalid-field");
}
else {
trigger.addClass("invalid-field");
trigger.focus();
}
});
}
}
})