javascript - 即使验证失败也会提交表单

标签 javascript jquery html

在允许提交表单之前,我尝试检查电子邮件是否存在。

如果电子邮件存在,我会收到为测试表单而添加的警报,但它仍然提交表单并移至“login.asp”。 我还添加了“event.preventDefault();”试图阻止它,但它仍然发生 这是我的代码:

<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    <script src="https://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
        $(document).ready(function() { //newly added 
            $('#Submit').click(function() {
                alert('in');
                var emailVal = $('#email').val(); // assuming this is a input text field
                $.post('User_RegisterCheck.asp', {
                    'email': emailVal
                }, function(data) {
                    if (data == 'exist') {
                        alert('exits');
                        return false;
                        event.preventDefault();
                    } else $('#FormRegID').submit();
                });
            });
        });
    </script>
</head>

<body>
    <form method="post" id="FormRegID" name="FormRegID" action="login.asp">

        <div class="form-group ">
            <label for="email" class="control-label">email</label>
            <input type="email" class="form-control w-75" id="email" name="email" placeholder="email" required>

        </div>
        <input type="image" name="Submit" src="/images/button_login-register.png" border="0" alt="Submit" id="Submit" style="width: 209px;" />
        </div>

    </form>
</body>

</html>

如何验证电子邮件?

最佳答案

问题是因为您太晚停止提交;您正在异步的 AJAX 请求中执行此操作。截止时间该表格已发送。

要修复此问题,请在事件上调用 preventDefault(),无论 AJAX 请求的状态如何。然后您可以发出请求,如果验证通过,您可以提交 form 元素(注意:不是包含表单的 jQuery 对象)并允许将数据发送到服务器。试试这个:

<form method="post" id="FormRegID" name="FormRegID" action="login.asp">
  <div class="form-group ">
    <label for="email" class="control-label">email</label>
    <input type="email" class="form-control w-75" id="email" name="email" placeholder="email" required>
  </div>
  <input type="image" name="Submit" src="/images/button_login-register.png" border="0" alt="Submit" id="Submit" style="width: 209px;" />
  </div>
</form>
jQuery(function($) {
  $('#FormRegID').on('submit', function(e) {
    e.preventDefault();
    var emailVal = $('#email').val();

    $.post('User_RegisterCheck.asp', {
      'email': emailVal
    }, function(data) {
      if (data.trim() !== 'exist') 
        this.submit();
    });
  });
});

请注意,此 Hook 到formsubmit 事件,而不是buttonclick

我还建议您从 AJAX 调用中以正式数据结构(例如 JSON)返回 bool 值,而不是纯文本。这是因为空格可能会导致后者被正确解释出现问题。

关于javascript - 即使验证失败也会提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59155499/

相关文章:

javascript - 这个函数打开一个div

javascript - 获取在语义 ui 中选中的 radio 值

javascript - 反击两个不同的 div 并隐藏 prepend() 函数

javascript - 用 jquery 替换图像 - js.erb - Rails

javascript - 如何在 JS 中用户控制重叠图像

javascript - 在不同的语言环境中使用 parseFloat()

javascript - 在悬停时创建多个 div(或表格)

html - 我的 class=float 没有在代码中 float ,整个 html 也没有通过 Google Tagmanager 出现在网站上

javascript - 仅在 javascript 中获取标记名为 <div> 的子项

javascript - Jquery .each() 呈现 [object HTMLUListElement] 而不是 HTML