javascript - 验证并提交表单后,重置表单+更改一些CSS样式

标签 javascript jquery html forms onsubmit

我有一个简单的 html 联系表单,带有验证检查。

我希望在成功提交表单后执行一些命令。但我设置这整件事的方式......我无法让它发挥作用。

HTML 联系表单:

<form id="mycontact_form" name="form_name" method="post" onsubmit="return validateForm();" action="https://domain.tld/cgi-bin/sendformmail.pl">

validateForm.js:

function validateForm() {
  //validating input fields
  if (!valid){
    return false;
  } else {
    if(condition1 == true)
     {
        document.form_name.submit(); return;
     }
    else {
        // doing stuff to form content
        document.form_name.submit(); return;
    }
    }
}

当按下提交按钮时,表单将被验证并将被提交到 perl 脚本 sendformmail.pl,该脚本返回 HTML Status 204,以便用户保持在线状态这个页面并且没有重定向(这是我让这部分工作的唯一方法)。

成功提交后我希望得到的是:

  • 清除/重置表单并
  • 一些小的 UI 内容:更改 2 个元素的背景 + 2 个输入字段的占位符/内部文本以表示感谢消息。

但是,例如,如果我将 document.form_name.reset() 放在 document.form_name.submit() 之后,那就太快了。它会在提交之前重置表单。我还尝试在 onsubmit 中的 validateForm() 之后调用另一个(独立)函数,但这似乎是错误的(好吧,至少它不起作用)。

所以我想我需要将这两件事(重置+CSS更改)放在一个单独的函数中,并在成功提交表单后调用它。 但如何、何地、何时?

我非常有兴趣学习一个简单而有效的解决方案。 (但 jQuery 也可用)

感谢您的帮助。

最佳答案

如果您的电子邮件脚本与联系表单位于同一域中,请尝试通过 ajax 提交。这是一个简单的 jQuery 示例,它将位于您的 onsubmit 处理程序中:

if (valid) {
    $.ajax({
        url: "/cgi-bin/sendformmail.pl",
        method: "POST",
        data: $("#mycontact_form").serialize()
    })
    .done(function() { // this happens after the form submit
        $("#mycontact_form")[0].reset();
    });
}

return false; // don't submit the form again non-ajax!

否则,如果位于不同的域中,请尝试将表单的目标设置为页面上隐藏 iframe 的 ID。由于这是跨域的,因此您无法真正了解表单提交的结果,因为 same origin policy 。您可以抱最好的希望,并在 X 秒后重置表单:

if (valid) {
    $("#mycontact_form").submit();

    // clear form 3 seconds after submit
    window.setTimeout(function() {
        $("#mycontact_form")[0].reset();
    }, 3000);
}

这两种方法都可以让用户保持在同一页面上而无需刷新。

关于javascript - 验证并提交表单后,重置表单+更改一些CSS样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32215461/

相关文章:

javascript - 如何运行 yarn 应用程序/如何运行 yarn 开发服务器?

javascript - 我如何将循环中的每个结果附加到他自己的幻灯片 jQuery Bootstrap 轮播中?

javascript - 如何从javascript隐藏时间标准

javascript - node/jade - 在事先不知道 key 的情况下显示 JSON 项目

javascript - 在 FabricJs 中使用 localStorage 对象重绘 Canvas

javascript - 在一个js文件中为不同的wordpress页面添加多个自定义脚本

PHP for 循环 - 在表中显示数据

javascript - 我想在 jquery 中显示今天的日期 -1 年?

javascript - Jest - 断言异步函数引发测试失败

javascript - 当鼠标不在文本区域内时获取文本区域的值