SimpleModal подтвердить перед закрытием диалога - PullRequest
5 голосов
/ 11 января 2010

Я использую SimpleModal (http://www.ericmmartin.com/projects/simplemodal/), и у меня есть форма, отображаемая в диалоговом окне. Что я хочу сделать, так это иметь возможность получать подтверждение каждый раз, когда пользователь пытается закрыть диалоговое окно (либо нажатием escape, либо щелкнув по значку закрытия) и спросив их, действительно ли они хотят закрыть его, не сохраняя данные формы. Я попробовал следующее:

onClose: function (dialog) {
    if (confirm('Are you sure you want to close without saving?')) {
        $.modal.close();
    }
}

Но это срабатывает только один раз. Если вы нажмете «Отмена», то не сможете снова закрыться позже, что имеет смысл. У кого-нибудь есть предложение или решение? Любая помощь будет принята с благодарностью. :)

Ответы [ 3 ]

8 голосов
/ 11 января 2010

Я посмотрел на источник SimpleModal для вас, и то, что вы хотите сделать, не может быть сделано с их кодом.Вот почему:

Непосредственно перед вызовом вашего пользовательского обратного вызова onClose он вызывает это:

s.unbindEvents();

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

Я бы порекомендовал вместо этого использовать jQuery UI Dialog , который вы должны найти очень простым для реализации этой функциональности, используя их beforeclose обратный вызов.Вы бы просто использовали:

beforeclose: function(){ 
    return confirm('Are you sure you want to close without saving?')
}
4 голосов
/ 18 мая 2010

Я получил это, используя то, что пытался jerone, но также связывал события:

onClose: function (dialog) {
    if (confirm('Are you sure you want to close without saving?')) {
        $.modal.close();
    }else{
        this.occb = false;
        this.bindEvents();
    }
}

Этот плагин должен быть обновлен для поддержки отмены события закрытия. Похоже, что его в действительности не рассматривают как событие в коде. Я бы хотел, чтобы он вел себя так же, как и любое другое событие js.

0 голосов
/ 11 января 2010

Я также посмотрел на источник, и когда выполняется событие onclosed, включается флаг occb.

То, что вы можете попробовать (я не пробовал), это переопределить это occb, поскольку оно передается в переменную this:

onClose: function (dialog) {
    if (confirm('Are you sure you want to close without saving?')) {
        $.modal.close();
    }else{
        this.occb = false;
    }
}

Надеюсь, это поможет.

...