Noty — это гибкая библиотека для отображения уведомлений на веб-странице. Помимо стандартных сообщений, она позволяет создавать интерактивные уведомления с элементами формы, что делает их полезными для подтверждений, ввода данных или выбора опций без необходимости перехода на другую страницу.
Для уведомлений с формами используются стандартные настройки Noty с
дополнительными возможностями через template и
callbacks. Ключевые параметры:
<input>,
<textarea>, <select> и
кнопки.topRight, bottomLeft, center и
другие).alert,
success, warning, error,
info).metroui, mint, relax.false.onShow, onClose,
onCloseClick.new Noty({
text: `
<form id="notyForm">
<label for="username">Имя пользователя:</label>
<input type="text" id="username" name="username" />
</form>
`,
layout: 'topRight',
type: 'info',
theme: 'mint',
timeout: false,
buttons: [
Noty.button('Отправить', 'btn btn-success', function (noty) {
const input = document.getElementById('username').value;
console.log('Введено:', input);
noty.close();
}),
Noty.button('Отмена', 'btn btn-error', function (noty) {
noty.close();
})
]
}).show();
Особенности:
timeout: false предотвращает автоматическое
закрытие.Noty.button(label, className, callback).getElementById().value.Формы в уведомлениях могут включать несколько элементов, включая чекбоксы, radio-кнопки и select. Валидацию данных рекомендуется выполнять до закрытия уведомления:
new Noty({
text: `
<form id="loginForm">
<input type="text" id="email" placeholder="Email" required />
<input type="password" id="password" placeholder="Пароль" required />
</form>
`,
layout: 'center',
type: 'alert',
theme: 'metroui',
timeout: false,
buttons: [
Noty.button('Войти', 'btn btn-primary', function (noty) {
const email = document.getElementById('email').value.trim();
const password = document.getElementById('password').value.trim();
if (!email || !password) {
alert('Все поля должны быть заполнены!');
return;
}
console.log('Email:', email, 'Password:', password);
noty.close();
}),
Noty.button('Отмена', 'btn btn-secondary', function (noty) {
noty.close();
})
]
}).show();
Примечания:
trim() убирает лишние пробелы.Noty поддерживает события, которые позволяют динамически управлять формой:
Пример установки фокуса на первый элемент формы:
new Noty({
text: `<input type="text" id="focusInput" placeholder="Введите текст">`,
layout: 'topCenter',
timeout: false,
buttons: [
Noty.button('OK', 'btn btn-success', function (noty) { noty.close(); })
],
callbacks: {
onShow: function () {
document.getElementById('focusInput').focus();
}
}
}).show();
Для уведомлений с выбором часто применяют <select>
и radio-кнопки. Можно сразу обрабатывать выбор пользователя через
callback:
new Noty({
text: `
<label>Выберите язык:</label>
<select id="languageSelect">
<option value="ru">Русский</option>
<option value="en">Английский</option>
<option value="es">Испанский</option>
</select>
`,
layout: 'bottomRight',
theme: 'relax',
timeout: false,
buttons: [
Noty.button('Сохранить', 'btn btn-info', function (noty) {
const lang = document.getElementById('languageSelect').value;
console.log('Выбран язык:', lang);
noty.close();
})
]
}).show();
Особенности:
timeout: false для форм, чтобы
пользователь не потерял введённые данные.Сохранить, Отмена,
Подтвердить).innerHTML в text.Noty-уведомления с формами удобно комбинировать с асинхронными запросами:
Noty.button('Отправить', 'btn btn-success', function (noty) {
const formData = new FormData(document.getElementById('notyForm'));
fetch('/submit', { method: 'POST', body: formData })
.then(response => response.json())
.then(data => {
console.log('Ответ сервера:', data);
noty.close();
})
.catch(err => console.error('Ошибка:', err));
});
Noty предоставляет мощные возможности для создания интерактивных уведомлений с формами, обеспечивая контроль над HTML, действиями кнопок и событиями, что делает её универсальным инструментом для пользовательского ввода прямо на странице.