2012-05-24 45 views
2

我有一個$ .ajax()函數,它用字符串位置來請求某些東西。如何在JavaScript中單擊確定按鈕之後不執行任何操作?

在ajax響應上假設result.location =「Somewhere」,但理論上它可以是任何字符串。

成功時(結果)它:

Line 1: alert("Hello There"); 
Line 2: alert("Look Here" + result.location); // Look here Somewhere 

會發生什麼事是「你好」彈出,「看這裏」不顯示警告框後直到用戶關閉「你好一個警告框有「警戒框。

然而,如果不是警報1號線我有一個div,而不是一個警告框,顯示了例如:所以

<div>Hello There <input type="button">OK</input></div> 

,而不是我有:

Line 1: showDivAlert(); 
Line 2: alert("Look Here" + result.location); // Look here Somewhere 

那麼什麼恰好是div顯示出來,並且彈出「Look Here」這個提示。我可以在函數「showDivAlert()」中放置什麼,以使showDivAlert()下面的任何代碼都不會被執行,直到用戶單擊「確定」按鈕?

注:這裏的關鍵是保持Ajax請求的result.location串

+0

保留參考'result.location'可能不只要需要爲價值仍然存在 - 也就是說,它可以作爲一個字符串參數傳遞給'showDivAlert'回調傳遞:HTTP: //stackoverflow.com/a/10746382/1081234 –

回答

0

更改您的HTML,讓您有:

<div>Hello There <input type="button" id="alert-ok">OK</input></div> 

現在您可以通過#警報-OK標識的按鈕。

如果你使用jQuery,只是附加一個事件:在JavaScript中有效地阻止執行線程

showDivAlert(); 
$("#alert-ok").click(function() { 
    //do work 
}); 
+0

您目前在上面發佈的內容的問題是result.location因此而丟失。 – Rolando

+0

如果你在ajax請求的回調中有它,它不會丟失。你可以在本地引用結果,因爲這是一個閉包。 – Jordan

0

,而不是在同一個塊中顯示的對話框,按下OK按鈕的事件處理程序定義你-OK郵編您的自定義對話框應該觸發任何其他行爲

事情是這樣的:

<div>Hello There <input type="button" onclick="okClicked()" value="OK"/></div> 

function okClicked() { 
    alert('Look Here'); 
} 
+0

上面目前發佈的問題是result.location因此而丟失。 – Rolando

-1

alert(),導致沒有被執行的下一行代碼,直到對話框關閉。

相反,您的showDivAlert();不會阻塞該線程並繼續正常執行。爲了解決這個問題,你應該爲你的方法添加回調函數。

$.ajax()類似,其中success未得到執行直到來自服務器的有效響應;您可以添加一個參數,像這樣:

function showDivAlert(callbackOK_){ 
    //render a fancy popup with a #btn-ok 
    $('#btn-ok').click(callbackOK_);//attach the callback passed 
} 

你另一個答案指出,result.location被「丟失」 - 相反,它根本不是在回調函數的執行範圍內都有效。

showDivAlert(function(){ 
    alert("Look Here" + result.location); 
}); 

Fiddle'd

相關問題