Функция обратного вызова Javascript для подтверждения загрузочного бокса

Я использую bootbox для подтверждения окна предупреждения, которое я уведомляю пользователя. Он вызывается из одного файла js, и у меня есть общая функция, в которой он создается. Как я могу использовать функцию обратного вызова, чтобы получить результат диалогового окна подтверждения:

Итак, мой js выглядит следующим образом:

 var message = "Do you want to close?";

 loadConfirmAlert(message);
 if (result) {
     //do stuff
 }

Функция loadCofirmAlert в другом файле js выглядит следующим образом:

var loadCofirmAlert = function (message) {

    bootbox.confirm(message, function (result) { });
}

что я не уверен, так это то, как передать это значение результата обратно в вызывающую функцию?


person Ctrl_Alt_Defeat    schedule 02.10.2014    source источник
comment
Или вы можете использовать $.Deferred.   -  person Regent    schedule 02.10.2014


Ответы (2)


Попробуйте это так

var message = "Do you want to close?";

loadConfirmAlert(message,function(result){
    if (result) {
        //do stuff
    }
});

var loadCofirmAlert = function (message,callback) {
    bootbox.confirm(message, function (result) { 
        callback&&callback(result);
    });
}

ОБНОВЛЕНИЕ

Где

callback&&callback(result)

Это просто более короткая версия

if (callback)callback(result); //if callback defined, call it

Вы также можете проверить, является ли обратный вызов функцией, используя

(typeof(callback)==="function")&&callback(result)
person Jevgeni    schedule 02.10.2014
comment
Это прекрасно работает - можете ли вы просто объяснить callback&&callback(result); синтаксис? - person Ctrl_Alt_Defeat; 02.10.2014

Вы должны поместить это выражение if внутри обратного вызова

bootbox.confirm(message, function (result) {
    if (result) {
        //do stuff
    }
});

Проблема, с которой вы столкнулись, заключается в том, что ваш loadConfirmAlert(message); не устанавливает какую-либо глобальную переменную с именем result, поэтому в вашем первом фрагменте кода result никогда не заполняется.

Ваша проблема очень хорошо описана здесь Как мне вернуть ответ из асинхронного вызова? (хотя он упоминает об этом с помощью ajax, но у вас, по сути, та же проблема)

person leopik    schedule 02.10.2014
comment
оператор if содержит поля, которые я скрываю, специфичные для страницы, на которой я вызываю loadCofirm, поэтому я действительно хочу передать результат обратно на эту страницу? - person Ctrl_Alt_Defeat; 02.10.2014
comment
@Ctrl_Alt_Defeat, затем взгляните на упомянутый $.Deferred или отправьте callback функцию как вторую параметр loadCofirmAlert, как предложил jevgenig. - person Regent; 02.10.2014