Переопределение Javascript Confirm() при сохранении обратного вызова
-
28-09-2019 - |
Вопрос
Кстати, я хочу переопределить стандартный js confirm()
функция в плагине jQuery.Я выяснил, как это сделать с помощью простого макета функций, приведенного ниже.
function confirm(opts) {
//code
}
Теперь, что я хочу сделать, это вызвать другую функцию внутри confirm
выполните описанную выше функцию, вот так...
function confirm(opts) {
openModal(opts);
}
Тот Самый openModal
функция откроет пользовательское модальное окно с сообщением и необходимыми кнопками.Кнопки являются обоими <span>
с помощью id
из любого submit
или cancel
. submit
возвращает значение true и cancel
возвращает значение false.Но теперь, как мне вернуть значение true или false в зависимости от нажатой кнопки?
Например...
$('#openModal').live('click', function() {
var opts = { title:'Modal Title', message:'This is a modal!' };
var resp = confirm(opts);
if(resp)
// user clicked <span id="submit"></span>
else
// user clicked <span id="cancel"></span>
});
Надеюсь, вы понимаете, что я имею в виду.
Решение
Это является возможно, но не совсем так, как вы описываете.Типичным способом использования функции подтверждения является:
if(confirm("Are you sure you want to submit this form?")) {
form.submit();
}
В приведенном выше примере нажатие кнопки возвращается скрипту синхронно.Выполнение функции приостанавливается до тех пор, пока не будет нажата кнопка.
"Модальный диалог" - это просто наложение на все содержимое HTML-веб-страницы.Для браузера кнопки внутри такого оверлея работают так же, как и кнопки в любом другом месте этой страницы.
Поскольку JavaScript обрабатывает такие нажатия кнопок асинхронно (т. е.используя функции обратного вызова для обработки событий), а не синхронно, подход, который вы пытаетесь использовать, не будет работать.
Вам нужно было бы изменить все части кода, использующие функцию подтверждения, чтобы они выглядели следующим образом:
confirm("Are you sure you want to submit this form?", function(result) {
if(result) {
form.submit();
}
});
Это будет работать так же, как регистрация обработчика событий в самом jQuery.Выполнение скрипта продолжается немедленно, пропуская мимо себя весь код в анонимной функции.Позже браузер вызовет эту функцию косвенно через обработчик событий JavaScript, который вы регистрируете в функции подтверждения, его назначение - вызвать функцию обратного вызова с помощью либо true
или false
по мере необходимости.