SimpleModal подтвердить перед закрытием диалога
Я использую SimpleModal ( http://www.ericmmartin.com/projects/simplemodal/), и у меня есть форма, которая отображается в диалоговом окне. То, что я хочу сделать, - это иметь возможность получать подтверждение каждый раз, когда пользователь пытается закрыть диалоговое окно (либо нажатием клавиши "Закрыть", либо щелкнув по значку закрытия), и спрашивает их, действительно ли они хотят закрыть его, не сохраняя данные формы., Я попробовал следующее:
onClose: function (dialog) {
if (confirm('Are you sure you want to close without saving?')) {
$.modal.close();
}
}
Но это срабатывает только один раз. Если вы нажмете "Отмена", то не сможете снова закрыться позже, что имеет смысл. У кого-нибудь есть предложение или решение? Любая помощь будет принята с благодарностью.:)
3 ответа
Я посмотрел на источник SimpleModal
для вас и того, что вы хотите сделать, нельзя сделать с их кодом. Вот почему:
Просто перед тем, как позвонить на ваш пользовательский обратный вызов onClose
это называется это:
s.unbindEvents();
Который фактически говорит: "Эта коробка закрывается, нравится вам это или нет". Это не похоже на обычный обратный вызов, который вы можете отменить.
Я бы порекомендовал вместо этого использовать JQuery UI Dialog, который вы найдете очень простым для реализации этой функциональности, используя их beforeclose
Перезвоните. Вы бы просто использовали:
beforeclose: function(){
return confirm('Are you sure you want to close without saving?')
}
Я получил эту работу, используя что-то вроде того, что пытался Джерон, но также связывал события:
onClose: function (dialog) {
if (confirm('Are you sure you want to close without saving?')) {
$.modal.close();
}else{
this.occb = false;
this.bindEvents();
}
}
Этот плагин должен быть обновлен для поддержки отмены события закрытия. Похоже, что в коде это не рассматривается как событие. Я хотел бы, чтобы он вел себя так же, как и любое другое событие js.
Я также посмотрел на источник и когда onclosed
событие выполняется occb
флаг включен.
Что вы можете попробовать (я не пробовал) это переопределить это occb
как это передается this
переменная:
onClose: function (dialog) {
if (confirm('Are you sure you want to close without saving?')) {
$.modal.close();
}else{
this.occb = false;
}
}
Надеюсь это поможет.