Javascript Alertify с возвратом из подтверждения

Я пытаюсь использовать alertify.js в качестве диалогового окна подтверждения для всех моих сценариев подтверждения. Но он просто не работает, как обычный JS confirm. В приведенном ниже коде я никогда не получаю return true

function aConf ( mes ) {
    alertify.confirm( mes, function (e) {
        return e;
    });
}

<a href="#" onclick="if(aConf(\'Are you sure you wish to remove this?\')) { function(); } return false;">Delete</a>

Конечно, если я заменю aConf на JS' confirm, это сработает. Так почему же alertify не отправляет мне свой результат?


person jfreak53    schedule 18.01.2013    source источник


Ответы (1)


Потому что подтверждение является блокирующей функцией (никакой javascript не будет работать, пока не вернет true/false), а alertify не блокирует (JS продолжает выполняться). Alertify не сразу возвращает значение true/false, вместо этого он, вероятно, немедленно возвращает undefined, а затем вызывает функцию обратного вызова позже, после того как пользователь нажимает OK или Cancel. Возвращаемое значение этой функции обратного вызова не имеет никакого эффекта в вашем примере, потому что код onclick уже завершил работу (поскольку он не блокирует).

Предполагая, что вы используете это: https://github.com/fabien-d/alertify.js/

Вот как это работает с функцией обратного вызова, а не с возвращаемым значением:

alertify.confirm( message, function (e) {
    if (e) {
        //after clicking OK
    } else {
        //after clicking Cancel
    }
});

Для вашего примера кода вы можете попробовать что-то вроде этого:

function performDelete ( a_element ) {
    // perform your delete here
    // a_element is the <a> tag that was clicked
}

function confirmAction ( a_element, message, action ) {
    alertify.confirm(message, function(e) {
        if (e) {
            // a_element is the <a> tag that was clicked
            if (action) {
                action(a_element);
            }
        }
    });
}

<a href="#" onclick="confirmAction(this, 'Are you sure you wish to remove this?', performDelete); return false;">Delete</a>

РЕДАКТИРОВАТЬ: обновлено, чтобы быть общим диалоговым окном подтверждения, которое вызывает функцию обратного вызова, если пользователь нажимает «ОК».

person Levi    schedule 18.01.2013
comment
Вот в чем проблема. Я не хочу создавать новую функцию каждый раз, когда я ее вызываю. Я хотел иметь общую функцию для отображения и возврата. Спасибо. - person jfreak53; 20.01.2013
comment
Вы имеете в виду, что хотите, чтобы ссылка переходила на ее href, если пользователь нажимает «ОК»? или есть какой-то javascript, который выполняет действие, если пользователь нажимает «ОК»? Смотрите мой обновленный ответ. - person Levi; 20.01.2013
comment
Нет, но то, что вы написали выше, теперь я могу настроить, чтобы сделать то, что мне нужно :) спасибо. - person jfreak53; 21.01.2013
comment
Если я введу какой-либо URL-адрес в href, он перейдет на этот URL-адрес и отобразит предупреждение. Как это решить? - person Jerold Joel; 10.03.2020