【问题标题】:cancel postback from javascript on confirm popup在确认弹出窗口中取消来自 javascript 的回发
【发布时间】:2011-03-11 10:48:52
【问题描述】:

关注这个问题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 is undefined”(正常,因为 arg 未实例化)脚本被锁定,因此没有回发(我也想要)。

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

欢迎提出任何建议!

谢谢

【问题讨论】:

    标签: asp.net javascript


    【解决方案1】:

    我遇到了一个与此非常相似的问题,尽管这个问题很老,但我认为我的回答可能会对以后的人有所帮助。当您有一个应该返回某些内容的 javascript 方法并将其放在 OnClientClick 中时,它仍然不会返回该方法真正返回的内容。为了解决这个问题,您必须返回 OnClientClick 中的方法。

    OnClientClick="return MethodName()"
    

    您还需要确保您的方法从确认对话框返回正确的真/假。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我知道为什么 arg 是未定义的,但是这个错误取消了回发,这对我来说是一种解决方法,它适合我,但我不想在状态下看到浏览器中的错误吧。
      • @user 你试过我建议的代码了吗?如果用户在没有任何 javascript 错误的情况下做出否定响应,它将取消回帖。
      【解决方案3】:

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

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

      【讨论】:

      • 这不起作用,因为执行实际回发的 javascript 被附加到客户端点击处理程序,从而导致他试图避免的问题。
      • 点击确定或取消,回发永远不会被调用
      猜你喜欢
      • 2012-09-10
      • 2021-03-28
      • 1970-01-01
      • 2021-11-11
      • 2012-02-20
      • 2013-08-29
      • 2010-10-23
      • 1970-01-01
      相关资源
      最近更新 更多