Событие oncomplete в библиотеке Inputmask
вызывается в момент, когда пользователь полностью заполнил маску ввода.
Обработчик применяется для запуска логики после успешного завершения
ввода: автоматической отправки формы, активации кнопок, перехода к
следующему полю, проверки данных, выполнения AJAX-запросов и других
действий.
oncomplete относится к системе callback-функций
Inputmask и работает только тогда, когда маска считается
завершённой.
Базовый пример:
Inputmask({
mask: "+7 (999) 999-99-99",
oncomplete: function () {
console.log("Маска заполнена");
}
}).mask("#phone");
После ввода последней обязательной цифры будет вызван обработчик.
oncomplete запускается не после потери фокуса, а именно
в тот момент, когда маска становится полностью заполненной.
Пример:
Inputmask({
mask: "9999-9999",
oncomplete: function () {
alert("Код введён полностью");
}
}).mask("#code");
Последовательность работы:
oncomplete.Inputmask({
oncomplete: function () {
}
});
Также возможна стрелочная функция:
Inputmask({
oncomplete: () => {
console.log("Готово");
}
});
thisВнутри обычной функции this указывает на DOM-элемент
поля ввода.
Inputmask({
mask: "999-999",
oncomplete: function () {
console.log(this.value);
}
}).mask("#field");
Результат:
123-456
При использовании стрелочной функции контекст this не
привязывается к элементу.
Неправильно:
Inputmask({
oncomplete: () => {
console.log(this.value);
}
});
Правильно:
Inputmask({
oncomplete: function () {
console.log(this.value);
}
});
Одно из основных назначений oncomplete — запуск логики
только после завершения ввода.
Пример активации кнопки:
const button = document.querySelector("#submit");
Inputmask({
mask: "9999 9999 9999 9999",
oncomplete: function () {
button.disabled = false;
}
}).mask("#card");
До полного заполнения кнопка остаётся заблокированной.
Inputmask({
mask: "999999",
oncomplete: function () {
this.form.submit();
}
}).mask("#sms");
После ввода полного SMS-кода форма отправится автоматически.
Часто используется в интерфейсах с последовательным вводом.
Inputmask({
mask: "9999",
oncomplete: function () {
document.querySelector("#nextField").focus();
}
}).mask("#pin");
Inputmask({
mask: "99/99",
oncomplete: function () {
console.log("Месяц и год заполнены");
}
}).mask(".card-date");
Если маска применяется к нескольким элементам, обработчик будет работать отдельно для каждого поля.
Inputmask передаёт объект события.
Inputmask({
mask: "999999",
oncomplete: function (event) {
console.log(event.type);
}
}).mask("#index");
Внутри oncomplete часто используется метод
unmaskedvalue().
Inputmask({
mask: "+7 (999) 999-99-99",
oncomplete: function () {
const raw = this.inputmask.unmaskedvalue();
console.log(raw);
}
}).mask("#phone");
Результат:
9991234567
oncomplete удобно комбинировать с дополнительной
валидацией.
Inputmask({
mask: "999999999999",
oncomplete: function () {
const value = this.inputmask.unmaskedvalue();
if (value.startsWith("0")) {
alert("Некорректное значение");
}
}
}).mask("#number");
Inputmask({
mask: "999999",
oncomplete: function () {
fetch("/check-code", {
method: "POST",
body: JSON.stringify({
code: this.inputmask.unmaskedvalue()
})
});
}
}).mask("#code");
onincompleteОчень часто oncomplete используется вместе с
onincomplete.
Inputmask({
mask: "9999",
oncomplete: function () {
console.log("Заполнено");
},
onincomplete: function () {
console.log("Не заполнено");
}
}).mask("#pin");
onclearedInputmask({
mask: "999999",
oncomplete: function () {
console.log("Полностью заполнено");
},
oncleared: function () {
console.log("Поле очищено");
}
}).mask("#code");
oncomplete работает и с массивами масок.
Inputmask({
mask: [
"999-999",
"9999-9999"
],
oncomplete: function () {
console.log("Одна из масок завершена");
}
}).mask("#field");
Событие вызывается после завершения любой подходящей маски.
Важно понимать разницу между обязательными и необязательными позициями.
Inputmask({
mask: "999[-999]"
});
Здесь:
oncomplete может сработать уже после ввода первых трёх
цифр.
greedyInputmask({
mask: "9{1,5}",
greedy: false,
oncomplete: function () {
console.log("Ввод завершён");
}
});
При использовании квантификаторов поведение зависит от конфигурации маски.
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
oncomplete: function () {
console.log("Дата введена");
}
}).mask("#date");
Inputmask({
alias: "currency",
oncomplete: function () {
console.log(this.value);
}
}).mask("#price");
Следует учитывать, что валютные alias могут иметь собственные особенности завершённости ввода.
Inputmask({
mask: "999999999999",
oncomplete: async function () {
const response = await fetch("/api/check", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
value: this.inputmask.unmaskedvalue()
})
});
const result = await response.json();
console.log(result);
}
}).mask("#iin");
Inputmask({
mask: "9999",
oncomplete: function () {
this.classList.add("valid");
}
}).mask("#pin");
Inputmask({
mask: "+7 (999) 999-99-99",
oncomplete: function () {
this.classList.remove("error");
}
}).mask("#phone");
Inputmask поддерживает jQuery-стиль инициализации.
$("#phone").inputmask({
mask: "+7 (999) 999-99-99",
oncomplete: function () {
console.log("Телефон заполнен");
}
});
useEffect(() => {
Inputmask({
mask: "999999",
oncomplete: function () {
console.log("Готово");
}
}).mask(inputRef.current);
}, []);
mounted() {
Inputmask({
mask: "9999",
oncomplete: function () {
console.log("Заполнено");
}
}).mask(this.$refs.code);
}
ngAfterViewInit() {
Inputmask({
mask: "999999",
oncomplete: function () {
console.log("Код введён");
}
}).mask(this.codeInput.nativeElement);
}
oncomplete: () => {
console.log(this.value);
}
this не будет ссылаться на input.
Inputmask({
mask: "9999"
});
Если введено только:
12
oncomplete вызван не будет.
mask: "999[-999]"
Разработчики иногда ожидают, что событие сработает только после заполнения всей строки, однако необязательная часть не влияет на завершённость.
Если пользователь изменяет значение после полного заполнения, а затем
снова завершает ввод, oncomplete будет вызван повторно.
Inputmask({
mask: "9999",
oncomplete: function () {
console.log("complete");
}
});
oncomplete от стандартного changechangeСрабатывает после изменения поля и потери фокуса.
input.addEventListener("change", handler);
oncompleteСрабатывает сразу после полного заполнения маски.
Inputmask({
oncomplete: handler
});
oncomplete от
blurblur вызывается при уходе фокуса даже при пустом
поле.
input.addEventListener("blur", handler);
oncomplete зависит только от завершённости маски.
Inputmask({
mask: "999999",
oncomplete: async function () {
const submitButton =
document.querySelector("#submit");
submitButton.disabled = false;
const response = await fetch("/verify", {
method: "POST",
body: JSON.stringify({
code: this.inputmask.unmaskedvalue()
})
});
const result = await response.json();
if (result.success) {
location.href = "/profile";
}
}
}).mask("#sms");
Inputmask({
mask: "9999 9999 9999 9999",
oncomplete: function () {
const number =
this.inputmask.unmaskedvalue();
if (number.length === 16) {
console.log("Карта введена полностью");
}
}
}).mask("#card");
Inputmask({
mask: "+7 (999) 999-99-99",
oncomplete: function () {
const phone =
this.inputmask.unmaskedvalue();
if (phone.startsWith("701")) {
console.log("Оператор A");
}
if (phone.startsWith("777")) {
console.log("Оператор B");
}
}
}).mask("#phone");
isComplete()Inputmask предоставляет внутреннюю проверку завершённости.
Inputmask({
mask: "999999",
oncomplete: function () {
if (this.inputmask.isComplete()) {
console.log("Проверка подтверждена");
}
}
}).mask("#code");
Inputmask({
mask: "9999",
oncomplete: function () {
const event =
new CustomEvent("maskComplete");
this.dispatchEvent(event);
}
}).mask("#pin");
Подписка:
document
.querySelector("#pin")
.addEventListener("maskComplete", () => {
console.log("Собственное событие");
});