Переопределение Javascript Confirm () при сохранении обратного вызова - PullRequest
6 голосов
/ 08 октября 2010


Кстати, я хочу переопределить стандартную функцию 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>
});

Надеюсь, вы понимаете, о чем я.

1 Ответ

14 голосов
/ 08 октября 2010

Это возможно , но не совсем так, как вы описали.Типичный способ использования функции подтверждения:

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 в зависимости от ситуации.

...