2010-09-29 42 views
2

我想寫一個自定義的窗口內確認對話框(基於jQuery UI),我們可以用它來控制窗口的各個方面(按鈕文本等)。我真正喜歡的是控件的行爲與內置的confirm()函數的行爲方式完全相同(調用confirm(),腳本執行暫停直到用戶單擊確定或取消,confirm()返回true或false) 。我環顧四周,發現這個解決方案,而我來的關閉看起來是這樣的:如何重現JavaScript的confirm()函數提供的「等待」功能?

//title = text to be displayed for title 
//text = text to be displayed in body of dialog 
//func = name of function to be called upon user selection, result will be passed as first parameter 
function aw_confirm(title, text, func){ 
    <%= ClientID %>_retVal = null; 
    <%= ClientID %>_func = func; 
    <%= ClientID %>_show(title, text); 
    <%= ClientID %>_waitForSelection(func); 
} 

function <%= ClientID %>_waitForSelection(func){ 
    if (<%= ClientID %>_retVal != null){ 
     var r = <%= ClientID %>_retVal; 
     <%= ClientID %>_retVal = null; 
     func(r); 
    } 
    else setTimeout("<%= ClientID %>_waitForSelection(<%= ClientID %>_func)", 10); 
} 

這是一個aspx控制,因此<%=客戶端ID%> _之前一切爲了使確保沒有人用其他控件中的代碼覆蓋函數。

正如您所看到的,當前的設置需要程序員編寫一個處理程序(這裏稱爲func),以便在用戶進行選擇時調用。我真正喜歡的是aw_confirm()等待用戶做出選擇然後返回。有沒有辦法做到這一點?預先感謝您提供的任何幫助或建議!

+1

你不能做你想做的。該代碼必須被編寫爲未來按鈕點擊事件的處理程序。 – Pointy 2010-09-29 13:42:36

+0

:(我很害怕這個。 – drayfar 2010-09-29 13:49:34

回答

1

Javascript主要是基於事件的。代碼對事件(點擊按鈕,計時器等)作出反應。 JQuery UI也遵循這個範例。你正在嘗試的是對付這個問題,如果可能的話,將會非常困難。你應該遵循基於事件的方法。

它與使用確認的代碼沒有多大區別。如果你有這樣的:

ret = confirm("Hello User") 
// do something 

你可以使用匿名函數作爲回調寫信

aw_confirm("Hello user", "", function(ret){ 
    // do something 
}) 

+0

我試圖儘可能簡單地用aw_confirm()調用來替換當前所有的調用來確認(),否則我會嘗試使用event-我遇到的最大問題是讓其他開發人員對我寫作需要更多工作的控件感到憤怒:P – drayfar 2010-09-29 13:52:45

+0

它與阻塞調用並沒有什麼不同,請參閱我的編輯答案 – 2010-09-29 14:10:54

+0

酷。非常感謝: ) – drayfar 2010-09-29 14:19:53