【问题标题】:Prevent Form Submit for Invalid Email Address防止表单提交无效的电子邮件地址
【发布时间】:2018-11-17 11:40:20
【问题描述】:

我正在使用这个工具: https://www.edq.com/real-time-email-validation/

... 验证电子邮件地址是否确实存在。

此工具可以正常工作,但即使验证失败,用户仍然可以提交表单。如果用户输入了无效的电子邮件地址,我需要在代码中添加什么以不允许用户提交表单?

执行验证的代码sn-p:

<script type="text/javascript">

        var $plugin = new emailValidation(              
          $( "#email"), {
            token: "[hidden]",
            proxyPath:  "[hidden]",
            featureVersion:  "1.0" ,
            timeout: 10000,
            inlineMode: true,
            showLoading: true,
            onSuccess: function (data) {
            // onSuccess callback implementation
            },
            onError: function (jqXHR, status, errThrown) {

            },
            messages: {
                emptyEmail:  "Please enter email.",
                error:  "Please contact Experian QAS support.",
                timeout:  "Timeout.",
                success: "yay!"
            },
            styles: {
                success: "success",
                successInline: "success-inline",
                error: "error",
                errorInline: "error-inline",
                loading: "loading",
                correctionEmail: "correctionEmail",
                emailPicklistHeader: "emailPicklistHeader",
                emailPicklist: "emailPicklist",
                picklistItem: "picklistItem",
                picklistItemText: "picklistItemText",
                closeButton: "closeButton",
            }
          }
      );


        </script> 

【问题讨论】:

  • 你能链接到插件文档而不是产品页面吗?
  • “这个工具工作正常” - 它只能为我测试的几个现有地址返回“未知”......我真的不明白其中的价值是什么是? // 您显示的验证方法似乎是异步的,因此您必须阻止用户提交表单,直到您从该异步调用获得肯定响应。
  • @CBroe - 你必须完成这两行才能测试:token: "[hidden]", proxyPath: "[hidden]",
  • @juneallison 我指的是他们工具的在线版本。

标签: javascript jquery forms email-validation onsubmit


【解决方案1】:

关键在于小部件事件:onSuccessonError。使用它们,您可以通过多种方式做到这一点,例如:

  1. 禁用提交按钮:

    onSuccess: function (data) {
        $('#mySubmit').prop("disabled", null);
    },
    onError: function (jqXHR, status, errThrown) {
        $('#mySubmit').prop("disabled", "disabled");
    }
    
  2. 阻止表单提交:

    onSuccess: function (data) {
        $('#myForm').data("email-ok", true);
    },
    onError: function (jqXHR, status, errThrown) {
        $('#myForm').data("email-ok", false);
    }
    
    // On form
    $("#myForm").on("submit", function(e) {
        if (!$(this).data("email-ok")) {
            e.preventDefault();
            // show an error message 
        }
    });
    

在这两种情况下,您都必须等待服务的响应,然后再管理您的表单。我认为选项#2更好,但#1也可以。

【讨论】:

  • 谢谢,但我尝试了这两种解决方案,但都没有奏效。我显然用正确的 ID 替换了 myForm 或 mySubmit。我还可能缺少什么?我尝试根据文档将“email-ok”替换为“已验证”。我的表单标签如下所示:
    webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST" id="SampleForm"> 我确实有一个隐藏字段,看起来像这样 thankyoupageurl.com">
  • @juneallison 你说的 not working 是什么意思。您需要检查控制台(F12)是否有错误或事件调试代码以查看实际发生的情况。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
相关资源
最近更新 更多