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调用仍然发生了两次