Javascript确认对话框 - 阻止事件处理程序触发?

时间:2011-10-07 14:47:51

标签: c# javascript asp.net


我有一个包含许多字段和几个复选框的表单。当用户单击“保存”时,如果未选中某个复选框,则会通过“确认”对话框提示他们是否仍要保存表单。如果他们点击没问题,按钮应该正常触发它的事件处理程序,但如果他们点击取消,则不会发生任何事情。

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

截至目前,无论用户选择何种方式,“保存”按钮的事件处理程序都会触发。任何建议都将不胜感激。

5 个答案:

答案 0 :(得分:2)

如果用户拒绝保存,则返回false,如下所示:

return confirm('Worksheet has not been verified. Save anyway?');
如果用户点击“是”,则

confirm()将返回true,如果点击“否”,则会false返回false指示浏览器停止正常处理事件。

答案 1 :(得分:2)

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

答案 2 :(得分: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;
}

答案 3 :(得分:0)

假设验证绑定到onsubmit事件,您只能从处理程序返回false,并且不会提交表单。

此外,如果您使用的是jQuery,则event.preventDefault()方法也会这样做。

答案 4 :(得分:0)

如果没有看到更多的代码,就很难确切地说出来,但是一个问题可能就是你的if语句。为确保正确的类型检查,请使用===,而不是假设您的值是布尔值。

if(document.getElementById(checkBox).checked === false){...}

您还可以在页面上有多个具有相同ID值的复选框...如果选中一个并且一个不是document.getElementById可能会获得未检查的复选框。

希望有所帮助。