2012-11-23 99 views
0

我正在構建一個簡單的基於Web的文本編輯器,並試圖實現類似於「保存更改?」的內容。當用戶嘗試打開文件並且當前文件未保存更改時,會出現對話框。jQuery UI,等待對話響應

的代碼是這樣的:

function openFile() { 
    if (hasChanges === true) { 
     $("#save-changes-dialog).dialog("open"); 
    } 

    // file opening stuff goes here 
} 

這顯然是行不通的,因爲會發生什麼是對話框被打開,然後打開該對話框,而不是等待後,文件打開代碼只是執行權獲取該對話的結果。

解決此問題的最佳方法是什麼?我試圖動態地改變按鈕在「保存更改」對話框中所做的操作,以便通過對話框按鈕本身調用文件打開代碼,但它看起來有點亂,而且我也遇到了計時問題,因爲有些AJAX調用。

這看起來似乎會經常出現,但我似乎無法找到明確的答案來解決問題。謝謝你的幫助!

回答

0

文件打開的東西不會「在這裏」。它進入對話框的按鈕處理程序。

當你定義的對話框:

$("#save-changes-dialog").dialog({ 
     resizable: false, 
     modal: true, 
     buttons: { 
      Save: function() { 
       // file opening stuff goes HERE instead! 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
      } 
     } 
    }); 
+0

那麼最好的方法是動態地改變按鈕在對話框中的作用,這取決於它從哪裏被調用?例如,他們將執行不同的操作,無論是打開文件,創建新文件還是導航離開頁面。或者應該爲每種情況單獨進行對話?另一個問題是,如果包含更改的文件是未保存的文件,則必須調用「另存爲」對話框,然後動態更改該對話框的按鈕處理程序。它只是看起來像一個凌亂,滑坡... – ARW

+0

我會有單獨的對話框,以便我可以有不同的標題,按鈕上的不同文本和其他特定的東西; (從UX的角度來看)要求「保存/取消」更好?和「加載/取消?」而不是通用的「確定/取消」,如果你通過指定一個對話框來完成所有這些工作,那就太麻煩了。但是,除了基本的'prompt'()'和'alert()'之外,在JS中有一個阻塞對話框是絕對不可能的(你正在提議的)。你必須去異步,並使用回調。 JS不等人。 – Amadan

0

試試這個:

以前叫中openFile現在應該叫checkForChanges,然後在對話框中,你可以調用中openFile()上
function checkForChanges() { 
    if (hasChanges === true) { 
     $("#save-changes-dialog").dialog("open"); 
     return false; 
    } 
    openFile(); 
} 

function openFile(){ 
    // file opening stuff goes here 
} 

任何地方你希望的任何事件