2014-10-02 37 views
1

我正在使用bootbox確認警告框,提醒用戶。它從一個js文件中調用,並且在創建它的地方有一個通用函數。如何使用回調函數來得到確認對話框的結果:用於確認bootbox的Javascript回調函數

所以我的JS是如下:

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

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

在另一個js文件的loadCofirmAlert功能則是如下:

var loadCofirmAlert = function (message) { 

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

我不確定的是如何將這個結果值傳遞迴調用函數?

+0

或者你可以使用[$ .Deferred(HTTP://api.jquery的.com /類別/推遲對象/)。 – Regent 2014-10-02 10:01:25

回答

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

這很好用 - 你能解釋回調&&回調(結果)嗎?句法? – 2014-10-02 10:09:10

+0

更新了此版本 – jevgenig 2014-10-02 10:12:09

1

你必須把如果回調的內部聲明

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

你面臨的問題是,你的loadConfirmAlert(message);不設置任何所謂的在你的第一個代碼段result等全局變量,result是從未填滿。

你的問題在這裏How do I return the response from an asynchronous call?很好的說明(雖然他與阿賈克斯提它,但你有essentialy同樣的問題)

+0

if語句雖然包含我隱藏的特定於我正在調用loadCofirm的頁面的字段,所以我真的想將結果傳遞迴該頁面? – 2014-10-02 10:01:47

+0

@Ctrl_Alt_Defeat然後看看提及的[$ .Deferred](http://api.jquery.com/category/deferred-object/),或者像'jevgenig建議的那樣,將'callback'函數作爲第二個參數發送到'loadCofirmAlert'。 – Regent 2014-10-02 10:03:17