【问题标题】:SimpleModal confirm before closing dialogSimpleModal 在关闭对话框前确认
【发布时间】:2010-01-10 21:48:01
【问题描述】:

我正在使用 SimpleModal (http://www.ericmmartin.com/projects/simplemodal/),并且我有一个显示在对话框中的表单。我想要做的是能够在每次用户尝试关闭对话框(通过转义或单击关闭图标)时出现确认,并询问他们是否真的想在不保存表单数据的情况下关闭它.我尝试了以下方法:

onClose: function (dialog) {
    if (confirm('Are you sure you want to close without saving?')) {
        $.modal.close();
    }
}

但它只会触发一次。如果您点击取消,则稍后无法再次关闭,这是有道理的。有人有建议或解决方案吗?任何帮助将不胜感激。 :)

【问题讨论】:

    标签: javascript jquery simplemodal


    【解决方案1】:

    我为您查看了SimpleModal 的来源,而您想要做的事情无法用他们的代码完成。这就是为什么:

    就在调用您的自定义回调 onClose 之前,它会这样调用:

    s.unbindEvents();
    

    这实际上是说“无论你喜不喜欢,这个盒子都会关闭”。这不像是一个可以取消的普通回调。

    我建议改用jQuery UI Dialog,您应该会发现使用beforeclose 回调非常容易实现该功能。您只需使用:

    beforeclose: function(){ 
        return confirm('Are you sure you want to close without saving?')
    }
    

    【讨论】:

    • 感谢您为我指出这一点,Doug :) 深入研究后,我已经能够调整代码以实现我想要的效果
    • @Zoic Ya,您可能可以编辑他们的插件,但是任何升级都必须重新应用您的更改。真高兴你做到了!如果此答案对您有所帮助,请务必将其标记为已接受。
    • 至少在 ff38.0.5 中区分大小写,beforeClose,否则这对我有用,谢谢
    【解决方案2】:

    我使用了 jerone 尝试的方法,但也重新绑定了事件:

    onClose: function (dialog) {
        if (confirm('Are you sure you want to close without saving?')) {
            $.modal.close();
        }else{
            this.occb = false;
            this.bindEvents();
        }
    }
    

    此插件需要更新以支持关闭事件的取消。看起来它并没有真正被视为代码中的事件。我希望它的行为与任何其他 js 事件一样。

    【讨论】:

      【解决方案3】:

      我还查看了源代码,当onclosed 事件被执行时,occb 标志被启用。

      你可以尝试(我没有尝试过)是覆盖这个occb,因为它被传递给this变量:

      onClose: function (dialog) {
          if (confirm('Are you sure you want to close without saving?')) {
              $.modal.close();
          }else{
              this.occb = false;
          }
      }
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        • 2016-04-30
        • 1970-01-01
        相关资源
        最近更新 更多