2011-10-07 115 views
0


Javascript確認對話框 - 防止事件處理程序觸發?

我已經有了一個窗體,有很多字段和一些複選框。當用戶點擊保存時,如果某個複選框沒有被選中,他們會被提示'確認'對話框,詢問他們是否仍然想保存表單。如果他們點擊確定,按鈕應該正常觸發它的事件處理程序,但是如果它們單擊取消,則不會發生任何事情。

function checkVerification(checkBox) 
{ 
    if (!document.getElementById(checkBox).checked) 
    { 
     confirm('Worksheet has not been verified. Save anyway?');    
    } 
} 

截至目前,Save按鈕的事件處理程序便會啓動而不管用戶的選擇。任何建議將不勝感激。

回答

1

您需要的確認對話框的返回值綁定到按鈕的OnClientClick,就像這樣:

<asp:Button ID="Button1" runat="server" OnClientClick="return confirm('Are you sure?');" ... /> 

在這種情況下,如果用戶點擊頁面將執行回發。如果用戶點擊回發將被中止。

看着您的評論後,試試這個:

btnSave.OnClientClick = String.Format("return checkVerify('{0}');", cbVerified.ClientID); 

而在你的JavaScript函數:

function checkVerify(checkBox) 
{ 
    bool continue = true; 
    if(!document.getElementById(checkBox).checked) { 
     continue = confirm('Worksheet not verified. Would you like to save?'); 
    } 
    return continue; 
} 
+0

嘿詹姆斯,謝謝你的回覆。我正在將複選框的ClientID傳遞給Javascript函數...
btnSave.Attributes.Add(「OnClientClick」,「return checkVerify('」+ cbVerified.ClientID +「')」);
Javascript函數寫法如下:
函數checkVerify(複選框) \t { \t if(!document.getElementById(checkBox)。檢查===真) \t { \t如果(確認( '工作表未驗證你想保存?')) \t { \t迴歸真實; \t} \t else \t { \t return false; \t} \t} \t}
保存被點擊.. – opticon

+0

而頁面回不調用btnSave的事件處理程序。對先前評論的格式抱歉。編輯:另外,沒有對話框顯示。 – opticon

+0

'OnClientClick'是Button的一個屬性,因此您不需要將其添加爲屬性。只要使用'btnSave.OnClientClick = ...' –

2

就返回false,如果用戶拒絕保存,就像這樣:

return confirm('Worksheet has not been verified. Save anyway?'); 

confirm()將返回true如果用戶點擊「是」,並false如果他們點擊「號」返回false指示瀏覽器正常停止處理事件。

2
var ok = confirm('Worksheet has not been verified. Save anyway?'); 
if (ok) { 
    // trigger 
} 
0

假設驗證綁定到onsubmit事件,你可以只返回false從處理程序和表單將不會提交。另外,如果您使用的是jQuery,則event.preventDefault()方法也會執行相同的操作。

0

沒有看到更多的代碼很難說清楚,但一個問題可能是你的if語句。爲了確保正確的類型檢查,使用===而不是假設你的值是一個布爾值。

如果(的document.getElementById(複選框).checked ===假){...}

你也可以在網頁上有一個以上的複選框以相同的id值......如果一個人選中並且一個不是document.getElementById可能會得到未被檢查的那個。

希望有所幫助。

相關問題