【问题标题】:Jquery modal dialog and form submitJquery 模态对话框和表单提交
【发布时间】:2011-11-24 11:30:40
【问题描述】:

我有一个表单,我需要在保存前向用户显示确认对话框。

我通过截取表单提交函数来做到这一点,如下:

$("#my_form").submit(function(e) {
    if ($("#id").val() > 0) {
        var $dialog = $('<div></div>')
            .html('Are you sure?')
            .dialog({
                autoOpen: false,
                title: 'Save New Invoice',
                modal: true,
                buttons: {
                    "OK": function() {
                        $dialog.dialog('close');
                        $("#my_form").submit();
                    },
                    Cancel: function() {
                        $(this).dialog("close");            
                    }
                }
            });
        $dialog.dialog('open');
        e.preventDefault();
        return false;
    }       
});

但是,“确定”按钮无法正常工作 - 对话框未关闭且表单未提交。

如果我按如下方式更改 OK 功能,则关闭对话框并显示警报。

"OK": function() {
  $dialog.dialog('close');
  alert('form will be submitted');
},

所以,我猜这与$("#my_form").submit(); 方法有关。

【问题讨论】:

  • 在提交表单 (#my_form) 时,您正在发布另一个表单 (#invoice_edit_form)?

标签: javascript jquery


【解决方案1】:

这不是一次又一次地调用您的表单提交函数吗?我看到您正在附加该函数以提交功能,当您再次调用提交时,它正在调用相同的函数。

您的 $("#invoice_edit_form") 是其他表单。这就像要求一个表单提交其他表单一样吗?

【讨论】:

  • 对不起,这是我的错字,我已经更正了。所有表单引用都应该是 $("#my_form")
  • 嗯,嗯,当然它会一次又一次地重新提交表单。我多么愚蠢。它甚至不是星期一。感谢您指出这一点。
【解决方案2】:

您遇到的问题是您的提交处理程序总是返回false 并且有e.preventDefault() 也很好衡量。无论用户单击“确定”还是“取消”,这两种方法都会停止提交表单。

您需要更改逻辑,以便您的模式确认显示在按钮单击(或任何其他事件)上,而不是表单提交上。然后,如果用户点击确定,您可以调用表单的submit() 方法。

$("#submitButton").click(function(e) {
    if ($("#id").val() > 0) {
        var $dialog = $('<div></div>')
            .html('Are you sure?')
            .dialog({
                autoOpen: false,
                title: 'Save New Invoice',
                modal: true,
                buttons: {
                    "OK": function() {
                        $dialog.dialog('close');
                        $("#my_form").submit();
                    },
                    Cancel: function() {
                        $(this).dialog("close");            
                    }
                }
            });
        $dialog.dialog('open');
    }       
});

【讨论】:

  • 我正在寻找相同的答案。我在 jsFiddle 上尝试了这个解决方案。它经过验证并且有效,有点。按下按钮会导致一个对话框闪烁然后消失。这是链接jsfiddle.net/mjstelly/xfYgV/5
猜你喜欢
  • 2018-05-14
  • 2011-10-17
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
相关资源
最近更新 更多