2011-10-07 112 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可能会得到未被检查的那个。

希望有所帮助。

相关问题