2016-08-11 70 views
1

我正在使用jquery確認(https://craftpip.github.io/jquery-confirm/)確認表單上的取消,但它不起作用。我的函數沒有返回jQuery的確認結果:獲取jquery確認返回值

function cnf(cntn, fn, prm) { 
    var res = false; 
    $.confirm({ 
     title: "", 
     content: cntn, 
     confirmButton: "Yes", 
     cancelButton: "No", 
     confirm: function() { res = true; fn(prm); }, 
     cancel: function() { } 
    }); 
    return res; 
} 
function emptyfn() { } 
function link() { 
    return cnf("Cancel changes?", emptyfn); 
} 

... 

<form method="post" action="whatever.php"> 
    <label for="test">Test Input</label> 
    <input type="text" class="form-control" id="test" maxlength="40" name="test" autofocus> 
    <input type="submit" name="button" value="Submit" class="btn-primary"> 
    <input type="submit" name="button" value="Cancel" class="btn-primary" onclick="return link();" formnovalidate> 
</form> 

(我知道我不需要在這個例子中的「Fn」和「PRM」,但我想在其他地方推廣使用的代碼) 。

當我試圖通過添加警報調試代碼,事情發生了奇怪和警報的確認之前出現了:

function link() { 
    var tmp = cnf("Cancel changes?", emptyfn); 
    alert(tmp); 
    return tmp; 
} 

我怎樣才能正確的代碼,爲什麼我的調試代碼得到執行了(是否與函數中的返回值有關)?

+1

Impossible ..... JavaScript中沒有等待,所以你不能暫停異步調用,這就是爲什麼腳本在用戶做出選擇時有回調的原因。 – epascarello

+0

@epascarello據我所知,如果調用本地警報,它將停止腳本執行,直到您關閉警報窗口 – Nikita

+1

是的,因爲這是本機警報,確認,提示工作的方式。您不能在JavaScript中重新創建該功能。 – epascarello

回答

-2

你的代碼不起作用,因爲javascript不會等到$ .confirm被執行,因爲它是一個異步函數。使用回調函數的最簡單方法。

function workWithRes() { 
... 
res = true; 
//and some stuff that should executed after confirm created 
} 
var res = false; 

function cnf(cntn, fn, prm, callbackFn) { 
    $.confirm({ 
     title: "", 
     content: cntn, 
     confirmButton: "Yes", 
     cancelButton: "No", 
     confirm: function() { fn(prm); callbackFn(); }, 
     cancel: function() { } 
    }); 
} 

對於其他解決方案,請閱讀javascript中的異步調用。

+0

好的,我不同意使用res變量,這是我的錯誤。但是使用一個包含document.getElementById(「form」)的回調函數。submit()可以做到這一點。 – tyebillion