在确认弹出窗口中取消javascript的回发

时间:2010-07-03 14:30:06

标签: asp.net javascript

发现此问题ASP.NET: OnServerClick event handler not called if using onclick

我实施了一种解决方法:

<button id="idBtnPrint" runat="server" type="submit" onserverclick="BtnPrint_Click" onclick="confirmImpression();">print</button>

javascript函数:

    function confirmImpression() {

        if (!confirm("sure ?"))
            arg.whatever;

    }

其中确认是肯定的,当取消回发没有运行时(因为我想要)启动回发只是因为生成错误js“arg未定义”(正常因为arg不是instanciate)脚本被锁定因此没有回发(我也想要。)

但如何正确地做到这一点。我不会在浏览器的状态栏中看到错误。

欢迎任何建议!

谢谢

3 个答案:

答案 0 :(得分:11)

我遇到了一个与此非常相似的问题,尽管这个问题已经过时了,但我认为我的回答可能有助于未来的人。如果你有一个javascript方法应该返回一些东西并将它放在OnClientClick中,它仍然不会返回方法真正返回的内容。为了解决此问题,您必须在OnClientClick中返回该方法。

OnClientClick="return MethodName()"

您还需要确保您的方法从确认对话框中返回正确的true / false。

function MethodName() {
    if (!confirm('Are you sure you want to X?')){
         return false;
    }
    else{
         return true;
    }
}

答案 1 :(得分:9)

只需将确认包装在if块中,如果确认失败则返回false。生成回发的标准javascript将附加到支票上,因此如果确认了操作,则会运行。

<button id="idBtnPrint" runat="server" type="submit"
        onserverclick="BtnPrint_Click"
        onclientclick="if (!confirm('sure ?')) { return false; }">print</button>

arg未定义的原因是您不将其用作参数,也不在窗口对象中定义。我假设你试图挂钩验证系统,但在这种情况下它不起作用,因为没有调用验证逻辑。如果用户以否定方式回答,您只想停止执行客户端处理程序,而上述代码将执行此操作。

虽然引用问题的答案也可行,但我更喜欢使用完整的javascript语句来帮助理解正在发生的事情。

答案 2 :(得分:3)

您想使用OnClientClick,只返回与确认返回的相反的内容......

<button ... onclientclick="return !confirm('Are you sure ?');">print</button>