Я обычно делаю собственные
alert и
confirm, которые выводят сообщения в модальных окнах.
Для обработки закрытия можно использовать либо функции обратного вызова, либо
Promise.
Использование с
Promise выглядит так:
Confirm("Да или Нет?").then((result) => {
if (result) {
console.log("Пользователь согласен на всё.");
}
else
{
console.log("Пользователь что-то подозревает.");
}
});
Внутри все равно без обработчиков не обойтись, но если функция вызова окна будет одна, то это не критично:
function Confirm(message) {
let p = new Promise((resolve, reject) => {
// тут код создания окна
// $.fancybox({
// modal: true,
// content: '<div>' + message + '</div>'
// });
// в обработчики кнопок нужно добавить вызов resolve
// true - если пользователь нажал Ok
// resolve(true);
// false - если пользователь нажал Отмена
// resolve(false);
});
return p;
}
При желании, можно сделать свой аналог
Promise, хотя смысла нет, готовый вполне пригоден для решения подобной задачи.
Вот более полный рабочий пример:
function Confirm(message) {
return new Promise(function(resolve, reject) {
var buttons = $('<div class="buttons" />');
var btnOk = $('<button class="btn btn-default">Ok</button>');
var btnCancel = $('<button class="btn btn-default">Отмена</button>');
var content = $('<div />');
btnOk.click(function() {
resolve(true);
$.fancybox.close();
});
btnCancel.click(function() {
resolve(false);
$.fancybox.close();
});
content.append('<div class="message" />');
content.append('<hr />');
content.append(buttons);
$('.message', content).html(message);
buttons.append(btnOk);
buttons.append(' ');
buttons.append(btnCancel);
$.fancybox({
modal: true,
content: content
});
});
}
Confirm('Вы согласны с этим решением?').then(function(result) {
if (result) {
$('body').append("<h1>Отлично!</h1>");
}
else {
$('body').append("<h1>Очень жаль...</h1>");
}
});