SimpleModal在关闭对话框之前确认

时间:2010-01-10 21:48:02

标签: javascript jquery simplemodal

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

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

但它只触发一次。如果你点击取消,那么以后再也无法关闭,哪种有意义。有人有建议或解决方案吗?任何帮助将不胜感激。 :)

3 个答案:

答案 0 :(得分:8)

我为你查看了SimpleModal的来源,你的代码无法完成你想要做的事情。这就是原因:

在调用自定义回调onClose之前,它会调用:

s.unbindEvents();

有效地说“无论你喜不喜欢,这个盒子都会关闭”。它不像你可以取消的普通回调。

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

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

答案 1 :(得分:4)

我使用jerone正在尝试的那种工作,但也重新绑定事件:

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

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

答案 2 :(得分:0)

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

您可以尝试的内容(我还没有尝试过)是覆盖此occb,因为它已传递给this变量:

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

希望这有帮助。