В библиотеке Noty объект buttons
используется для добавления интерактивных элементов управления внутри
уведомления. Эти элементы позволяют реализовать подтверждение действий,
выбор вариантов, отмену операций и другие сценарии взаимодействия с
пользователем.
buttons представляет собой массив экземпляров класса
Noty.button, где каждый элемент описывает одну кнопку с
определёнными параметрами и поведением.
Каждая кнопка создаётся через конструктор:
new Noty.button(text, className, onClick, attributes)
И затем передаётся в массив:
new Noty({
text: 'Удалить файл?',
buttons: [
new Noty.button('Да', 'btn btn-success', function () {
console.log('Удаление выполнено');
}),
new Noty.button('Нет', 'btn btn-danger', function () {
console.log('Удаление отменено');
})
]
}).show();
Noty.buttontextТип: String
Назначение: текст, отображаемый на кнопке
new Noty.button('Сохранить', ...)
new Noty.button('<b>OK</b>', ...)
classNameТип: String
Назначение: CSS-классы для стилизации кнопки
new Noty.button('OK', 'btn btn-primary', ...)
Особенности:
onClickТип: Function
Назначение: обработчик события нажатия
new Noty.button('OK', 'btn btn-primary', function () {
console.log('Нажато');
})
Функция получает два аргумента:
function (notyInstance, event) {
// notyInstance — экземпляр уведомления
// event — объект события
}
Пример с использованием:
new Noty.button('Закрыть', 'btn btn-secondary', function (noty) {
noty.close();
})
attributesТип: Object
Назначение: дополнительные HTML-атрибуты кнопки
new Noty.button('Подробнее', 'btn btn-info', handler, {
id: 'details-btn',
'data-id': 42
})
Особенности:
{
text: 'Текст кнопки',
className: 'css-классы',
onClick: function(notyInstance, event) {},
attributes: {
key: 'value'
}
}
По умолчанию уведомление не закрывается автоматически при нажатии кнопки. Закрытие необходимо вызывать вручную:
new Noty.button('OK', 'btn btn-success', function (noty) {
noty.close();
})
Кнопки часто используются для запуска асинхронных операций:
new Noty.button('Отправить', 'btn btn-primary', function (noty) {
fetch('/api/send')
.then(() => {
noty.setText('Отправлено!');
noty.close();
});
})
Можно динамически изменять поведение через DOM:
new Noty.button('Загрузка...', 'btn btn-primary', function (noty, event) {
event.target.disabled = true;
});
Массив buttons позволяет создавать сложные
интерфейсы:
new Noty({
text: 'Сохранить изменения?',
buttons: [
new Noty.button('Сохранить', 'btn btn-success', function (noty) {
console.log('Сохранено');
noty.close();
}),
new Noty.button('Не сохранять', 'btn btn-warning', function (noty) {
console.log('Пропущено');
noty.close();
}),
new Noty.button('Отмена', 'btn btn-danger', function (noty) {
noty.close();
})
]
}).show();
Объект notyInstance, передаваемый в
onClick, предоставляет доступ ко всем методам
уведомления:
noty.close() — закрыть уведомлениеnoty.setText(text) — изменить текстnoty.setType(type) — изменить тип уведомленияnoty.show() — повторно показатьПример:
new Noty.button('Ошибка', 'btn btn-danger', function (noty) {
noty.setType('error');
noty.setText('Произошла ошибка');
})
Кнопки не имеют жёсткой привязки к стилям, что даёт гибкость:
.custom-btn {
background-color: #222;
color: #fff;
border-radius: 4px;
}
new Noty.button('Custom', 'custom-btn', handler)
Поддерживается вставка HTML:
new Noty.button('<i class="icon-ok"></i> OK', 'btn btn-success', handler)
Это удобно для:
Порядок отображения кнопок соответствует порядку в массиве:
buttons: [
button1,
button2,
button3
]
Изменение порядка элементов массива напрямую влияет на UI.
buttons передан как
массивnew Noty.buttononClick обязателен для интерактивностиfunction confirmAction() {
new Noty({
text: 'Вы уверены?',
modal: true,
buttons: [
new Noty.button('Да', 'btn btn-success', function (noty) {
console.log('Подтверждено');
noty.close();
}),
new Noty.button('Нет', 'btn btn-danger', function (noty) {
noty.close();
})
]
}).show();
}
Особенности:
modal: true блокирует взаимодействие с остальной
страницейfunction createButton(id) {
return new Noty.button('Выбрать', 'btn', function () {
console.log('ID:', id);
});
}
const items = ['A', 'B', 'C'];
const buttons = items.map(item =>
new Noty.button(item, 'btn btn-info', function () {
console.log(item);
})
);
new Noty({
text: 'Выбор:',
buttons: buttons
}).show();
buttons1. Передача функции вместо кнопки
buttons: [
function() {} // ошибка
]
2. Отсутствие new
Noty.button(...) // ошибка
3. Не закрывается уведомление
Причина — отсутствие noty.close() в обработчике.
После создания кнопки Noty формирует DOM-элемент
<button> с:
innerHTML)clickЭто делает buttons полноценным мостом между уведомлением
и пользовательским интерфейсом, позволяя превращать простые уведомления
в интерактивные элементы управления.