2013-06-05 46 views
1

更新我有以下簡單的對話框:變量值不是內部對話

function confirmDialog(message, title) { 


var returnvalue; 

if ($("#confirmDialog").length == 0) 
    $('body').append('<div id="confirmDialog"></div>'); 

var dlg = $("#confirmDialog") 
    .html(message) 
    .dialog({ 
     autoOpen: false, 
     minHeight: 50, 
     title: title, 
     show: { 
      effect: "explode", 
      duration: 250 
     }, 
     hide: { 
      effect: "explode", 
      duration: 250 
     }, 

     buttons: { 
      "OK": { 
       text: "OK", 
       class: "", 
       click: function() { returnvalue = true; $("#confirmDialog").dialog("close"); } 
      }, 

      "Cancel": { 
       text: "Cancel", 
       class: "", 
       click: function() { returnvalue = false; $("#confirmDialog").dialog("close"); } 
      } 
     }, 
     modal: true 
    }); 
$('#confirmDialog').dialog("open"); 
return returnvalue; 
} 

非常簡單的實現。我的問題是,當我運行腳本時,最後,當它返回變量returnvalue時,這是undefined,意思是它沒有將它設置爲truefalse,這取決於哪個按鈕被點擊。

我試過將它設置爲var returnvalue = false;,但無論點擊哪個按鈕,它都不會得到不同的值。

任何幫助表示讚賞!謝謝!

編輯:

我相信我發現爲什麼變量不被設置。我從另一個對話框的click事件中調用這個對話框,當用戶點擊父對話框的「保存」按鈕後,彈出這個對話框。現在,由於它包含在一個函數中,它不會等待我的輸入,也就是說,它不會「看到」我單擊了「確定」或「取消」。我怎樣才能解決這個問題?

回答

1

我會按鈕點擊觸發一個事件之前,他們關閉對話框,然後我會聽到在父進程中發生的事件。

  • 父對話框打開
  • 用戶點擊保存
  • 打開確認對話框
  • 用戶關閉確認對話框
  • 確認對話框觸發「OK」或「取消」事件取決於
  • 父對話框被監聽對於「ok」或「cancelled」事件
  • 父對話相應地作出反應

確認對話框按鈕

buttons: { 
      "OK": { 
       text: "OK", 
       class: "", 
       click: function() { $(this).trigger("ok"); $("#confirmDialog").dialog("close"); } 
      }, 

      "Cancel": { 
       text: "Cancel", 
       class: "", 
       click: function() { $(this).trigger("cancel"); $("#confirmDialog").dialog("close"); } 
      } 
     } 

父對話框,或的document.ready()

$("#confirmDialog").on({ 
    "ok":function(event,ui){ 
     //save work 
    }, 
    "cancel":function(event,ui){ 
     // cancel work 
    } 
    },null,null); 
+0

非常有意義。我現在就試試 – Jose

+0

延期的東西太棒了!我只是不知道你是否使用jqueryUI widget工廠。 – DefyGravity

+0

我會將您的答案標記爲解決方案,因爲它確實解決了我的問題。但似乎我將採用延期方法。我很感謝你的幫助:) – Jose

2

jQuery的對話框不阻斷執行像內置在JavaScript confirm()功能。我可以建議兩種可能的解決方案:

  1. 將「ok」和「cancel」回調傳入您的confirmDialog函數。
  2. 讓您的confirmDialog函數返回一個承諾對象,您可以在單擊按鈕並解析調用函數後等待解析。

我寧願選擇2

+0

延期引用,+1 – DefyGravity

+0

你能指點我你在想什麼特定的屬性嗎?遞延? – Jose

+0

是的,Deferred有一個名爲promise()的函數,它返回一個像延遲一樣工作但不能解析的對象。在這種情況下,您不希望允許調用函數解析延遲。 http://api.jquery.com/deferred.promise/ –