2014-10-02 9 views
1

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

Так что мой 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) { }); 
} 

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

+0

Или вы можете использовать [$ .Deferred] (Http: //api.jquery .com/категория/отложенной объект /). – Regent

ответ

3

Попробовать его, как этот

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); 
    }); 
} 

UPDATE

Где

callback&&callback(result) 

это просто сокращенный вариант

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

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

(typeof(callback)==="function")&&callback(result) 
+0

Это хорошо работает - можете ли вы просто объяснить обратный вызов && callback (результат); синтаксис? –

+0

Обновлено asnwer – jevgenig

1

Вы должны положить, что если заявление внутри обратного вызова

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

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

Ваша проблема очень хорошо описано здесь How do I return the response from an asynchronous call? (хотя он упоминает его с помощью AJAX, но вы испытываете essentialy ту же проблему)

+0

оператор if содержит поля, которые я скрываю для страницы, на которой я вызываю loadCofirm, поэтому я действительно хочу передать результат на эту страницу? –

+0

@Ctrl_Alt_Defeat затем взгляните на упомянутый [$ .Deferred] (http://api.jquery.com/category/deferred-object/) или отправьте функцию обратного вызова в качестве второго параметра 'loadCofirmAlert', как предположил jevgenig. – Regent

Смежные вопросы