Javascript AJAX请求在验证时运行两次

Javascript AJAX请求在验证时运行两次,javascript,jquery,regex,email-validation,Javascript,Jquery,Regex,Email Validation,我正在对电子邮件输入进行验证 $("#email").on("input",function() { email = $(this).val(); const regex_1 = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; const regex_2 = /^\w+([

我正在对电子邮件输入进行验证

$("#email").on("input",function() 
{
    email = $(this).val();
     const regex_1 = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

     const regex_2 = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,10})+$/;

var re1 = new RegExp(regex_1);   
var re2 = new RegExp(regex_2);   

     if(re1.test(email)===true && re2.test(email)===true)
     {
         e.preventDefault();

         $.ajax({  
                url:"Validate.php",  
                method:"POST", 

                data:'type=check_email&email='+email,  

                success:function(data)
                {  

            if(data == 'FAIL')
            {
                $("#email").addClass("is-invalid");
                $("#email").removeClass("is-valid");
                $("#email").focus();
            }
            else
            {
                $("#email").addClass("is-valid");
                $("#email").removeClass("is-invalid");
            }
                }  
           });  
     }
     else
     {
           $("#email").addClass("is-invalid");
           $("#email").removeClass("is-valid");
       $("#email").focus();
     }
        $("#email").removeClass("is-invalid");
        $("#email").removeClass("is-valid"); 
  });
所以我的问题是,当通过RegEx的验证时,AJAX调用进行了两次,而第一次成功的结果:function(data)本身返回success

对同一实例的两次连续查询将不必要地增加服务器上的负载

我个人认为我的绑定在这里是错误的,或者我没有使用e.preventDefault()

但是我尝试使用输入焦点更改键控(单个绑定和多个绑定),但是没有效果,查询仍然运行两次

这里的概念是,只有当正则表达式测试返回true时,才需要运行ajax(仅一次)。为什么它在这里跑了两次

必需:电子邮件(字符串)应通过两个正则表达式测试


代码中的事件参数
e
缺失

$("#email").on("input",function(e)
    ...
    ...
    e.preventDefault();
编辑:

为了防止处理程序触发多个事件,可以
返回false来自JQuery文档:

从事件处理程序返回false将自动调用 event.stopPropagation()和event.preventDefault()

如果事件绑定多次,请使用
off()
确保只有一个处理程序可用。e、 g

$("#email").off('input').on("input",function(e) {
   ...

代码中的事件参数
e
缺失

$("#email").on("input",function(e)
    ...
    ...
    e.preventDefault();
编辑:

为了防止处理程序触发多个事件,可以
返回false来自JQuery文档:

从事件处理程序返回false将自动调用 event.stopPropagation()和event.preventDefault()

如果事件绑定多次,请使用
off()
确保只有一个处理程序可用。e、 g

$("#email").off('input').on("input",function(e) {
   ...

preventDefault应该在if内部的AJAX调用之前使用(regex.test(str)==true)还是在启动函数代码之前使用?另外,您不需要与
true
进行比较。这就像说
if(true==true)
。只要做
if(regex.test(str))
等@怀疑它没有按预期工作。AJAX调用仍在进行两次。应该在if内部的AJAX调用之前使用默认值(regex.test(str)==true)还是在启动函数代码之前使用默认值?此外,您不需要与
true
进行比较。这就像说
if(true==true)
。只要做
if(regex.test(str))
等@怀疑它没有按预期工作。AJAX调用仍然发生了两次