Теперь проблема в том, что это не может помочь мне изменить диалог подтверждения на сайте, как мы сделали с alert ();
Это верно. Невозможно воспроизвести синхронный характер функций оповещения / подтверждения / приглашения в собственном JavaScript. Существует нестандартный метод showModalDialog
, который может сделать это с помощью отдельного всплывающего документа, но он поддерживается не всеми браузерами и, как правило, считается крайне нежелательным.
Таким образом, стратегия замены плагинов не сработает. Вам придется менять каждое место, где вы вызывали эти методы, в оставшейся части скрипта.
Обычный шаблон - сделать это с помощью встроенных анонимных функций, чтобы сохранить локальные переменные с помощью замыкания, например. заменить:
function buttonclick() {
var id= this.id;
if (confirm('Are you sure you want to frob '+id+'?'))
frob(id);
wipe(id);
}
с:
function buttonclick() {
var id= this.id;
myConfirm('Are you sure you want to frob '+id+'?', function(confirmed) {
if (confirmed)
frob(id);
wipe(id);
});
}
Если вам нужно this
для сохранения, вам нужно взглянуть на еще одно вложенное замыкание или function.bind, чтобы сделать это. Если у вас есть вызов confirm
в цикле, все становится значительно сложнее.
Очевидно, что вы также должны убедиться, что критическое глобальное состояние не изменяется, пока окно подтверждения не активировано. Обычно этот риск сводится к минимуму за счет наложения остальной части страницы с наложением, чтобы перестать проходить клики. Однако, если у вас есть тайм-ауты, они все равно могут срабатывать.