【问题标题】:Closing an HTML form in a jQuery modal with the submit button使用提交按钮在 jQuery 模式中关闭 HTML 表单
【发布时间】:2016-01-25 22:18:06
【问题描述】:

我在 jQuery modal 中继承了以下 HTML 表单:

<div id = "openModal" class = "modalDialog">
<div>
<a href = "#close" title = "close" class = "close">X</a>
<form id = "write_us_form" action="" method = "post">
    <div class = "form_container">
        <label class = "form_label">Name</label>
        <input type = "text" class = "form_textfield" name = "f_name"><br>
        <label class = "form_label">E-mail</label>
        <input type = "text" class = "form_textfield" name = "f_email"><br>
        <label class = "form_label">Subject</label>
        <input type = "text" class = "form_textfield" name = "f_subject"><br>
        <label class = "form_label">Message</label>
        <textarea class = "form_textarea" name = "f_message" rows = "5"></textarea>
        <input type = "submit" class = "form_submit_button" value = "Send message">
    </div>
</form>
</div>
</div>

当我点击提交按钮时,会运行以下 jQuery 脚本,显然是为了不刷新页面并运行 send_form.php 文件来发送电子邮件:

$(function ()
{
    $('#write_us_form').on('submit', function (e)
    {
        e.preventDefault (); // prevent page reload
        $.ajax (
        {
            type : 'POST', // hide URL
            url : 'send_form.php', // form validation file
            data : $('#write_us_form').serialize (),
            success : function (data)
            {
                $('#openModal').dialog('close');
                alert ('Thank you for contacting us!');
            }
            });
        });
    });

代码不做两件事: 1. 关闭模态。我已经添加了 dialog('close') 部分,但它没有任何效果。 2. 如果我用关闭按钮关闭模态,然后在显示模态的网站上单击正确的按钮,表单中仍然有以前的内容。

php 部分正常工作,发送了正确的电子邮件,我只是想找到一种方法来关闭模式并在再次打开时刷新表单。

感谢您的帮助!

【问题讨论】:

  • 虽然我对 jQuery modals 不够熟悉(我编写了自己的模态系统 - 在我个人看来 - 更好的特性),但对于这种形式,我绝对可以建议:$("#write_us_form")[0].reset(); -将表单重置为其默认值。
  • 感谢 Niet 的快速回复,第 2 项已解决!
  • 您正在使用 jQuery UI?你看到警报了吗?
  • 由于是继承的,从脚本包含在head部分来看,不包含jQuery UI。不,警报也不显示。
  • 那么dialog插件是什么?向您的 Ajax 调用添加错误处理程序。

标签: javascript jquery html forms


【解决方案1】:

编辑:

如果您的 ajax 调用不成功,您的对话框可能不会关闭。如果您的“感谢您联系我们”警报正在执行并且您的模式仍未关闭,则可能是您的语法有问题。可能的情况是,您的模式是引导模式,在这种情况下,语法会有所不同。你会想要hide 模态。

在表单内容的情况下,你想reset成功块中的表单。请参阅下面的修改代码:

$('#write_us_form').on('submit', function (e)
    {
        e.preventDefault (); // prevent page reload
        $.ajax (
        {
            type : 'POST', // hide URL
            url : 'send_form.php', // form validation file
            data : $('#write_us_form').serialize (),
            success : function (data)
            {
                $('#openModal').modal('hide');
                $("#write_us_form").trigger("reset");
                alert ('Thank you for contacting us!');
            }
            });
        });
    });

【讨论】:

  • $('#openModal').modal('hide');
  • Chishaku,不幸的是它仍然没有关闭。它似乎没有通过模态隐藏部分,因为表单没有重置并且警报也没有显示。
  • @epascarello 我在假设使用引导程序。我修改了我的答案以反映这一点。
  • @hPi 该问题与模态无关。您的 ajax 调用没有返回成功状态代码,因此成功块中的所有代码都没有执行。您需要检查您的 send_form.php 路由的响应和状态代码以识别错误。
  • 奇怪的是,如果我取出模态隐藏部分并只保留触发器重置和警报,那么字段会重置并显示警报。只有模态不会关闭。所以成功的部分运行...
猜你喜欢
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 2013-04-09
  • 2010-11-15
相关资源
最近更新 更多