2014-09-23 213 views
0

這是我正在試圖做的....jConfirm不返回true或false

function myFunction() 
{ 
    var x=jConfirm('Can you confirm this?', 'Confirmation Dialog', function (r) { 
     y=r; 
     alert(y); 
    }); 

    alert(x); 
} 

爲什麼警報(x)的運行第一(我在JavaScript的初學者),並提醒「未定義」,當我按下確定後,它會提示「真」,而當我按下取消時會顯示「錯誤」。

有什麼辦法可以讓jConfirm返回true或false ...即x是trur還是false?

我正在使用jConfirm的「http://abeautifulsite.net/」插件。

+0

請參閱http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call。雖然這不是一個AJAX調用,但對於相同的解決方案來說,它本質上是一個問題。 – JJJ 2014-09-23 10:41:54

+0

是你預先定義的嗎? – 2014-09-23 10:42:00

+0

@Orion沒有任何區別。 – JJJ 2014-09-23 10:42:44

回答

0

jConfirm不創建alert框,它創建一個看起來像一個警告框的HTML元素。這裏的重要區別在於,一個alert()框將停止Javascript執行,直到它關閉,因此alert(1); console.log(2);將首先警告,然後登錄到控制檯。由於jConfirm 不是使用alert(),如果您調用jConfirm(1, ...); console.log(2)它將顯示確認框(HTML),然後在稍後寫入控制檯。

這樣做的複雜的字版本是alert()同步 - 它鎖定的腳本執行,直到您選擇從警報東西。 jConfirm是異步,並且腳本執行繼續獨立於您的選擇,直到您選擇某個內容爲止,此時它會觸發回調函數。

+0

必須有一些使jConfirm同步的方法嗎?實際上上面的代碼並不是真正的問題..我有什麼是刪除圖標,當用戶點擊刪除時,jConfirm應該要求確認並根據選項應該執行點擊操作。 – dividedbyzero 2014-09-23 10:48:47

+2

爲什麼必須有?它被寫成是異步的,它不是你可以快速改變的東西。你可能不得不修改你的代碼來處理回調,並使其成爲事件驅動的**(谷歌它)。您必須創建一個名爲'deleteRow'(或類似的東西)的函數,並在jConfirm回調中調用它,如果它們單擊了「是」。 – Joe 2014-09-23 10:51:42

+0

爲什麼不能將操作代碼放在回調函數中?這就是它的意思。 – JJJ 2014-09-23 10:57:50