Переопределение Javascript Confirm() при сохранении обратного вызова

StackOverflow https://stackoverflow.com/questions/3886228

Вопрос


Кстати, я хочу переопределить стандартный 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 по мере необходимости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top