jQuery:keyup事件 – ajax返回validation

我将从我想要做的事开始。

我创建了一个“忘记密码”系统,用户输入他们的电子邮件地址,并且(如果正确)他们将收到一封带有重置链接的电子邮件。

表单页面中有一小部分ajax,用于检测输入的电子邮件是否在数据库中。 如果电子邮件确实存在于数据库中,则表单将颜色更改为绿色,并启用提交按钮。 如果未检测到电子邮件,则表单将保持红色并且禁用提交按钮。

在此处输入图像描述

问题在于,当键入电子邮件地址时,如果用户输入的字符多于正确的电子邮件,则会发生密钥事件(基本上如果hello@123.com在我的数据库中,则必须输入hello @ 123。 com1用于提交以启用)

这是我的JSFiddle除了ajax工作之外的所有东西。

以下是ajax文件本身的示例:

 

如果有任何其他信息,我可以提供,这将有所帮助,请告诉我。 谢谢。

编辑:

由于似乎还没有快速修复/回答,我做了一个简短的video,显示究竟会发生什么。 你可以在这里看到它: https : //www.youtube.com/watch?v = P-2Gz5b4ek8

Ajax请求是异步的! 在您检查if(databaseCheck != 1)的情况下, if(databaseCheck != 1)的值是先前ajax的响应。 这就是为什么你必须输入1个额外的字符来获得最后的结果。

 $('input').bind("keyup", function() { $.ajax({ type: "POST", url: "ForgotPasswordAjax.php", data: {email: $('#email').val()}, success: function(output){ console.log(output); notification(output); } }); }); function notification(databaseCheck) { if (databaseCheck != 1) { .... } else { .... } } 

在成功部分调用这样的函数,它将确保这些代码将在ajax成功后运行。 它将解决您当前的问题,但您必须防止同时进行ajax调用。 我们不知道哪个请求首先返回,如果第一个请求响应最后js将设置通知与该响应。 所以你必须添加一个处理标志来防止它。

我已经更新了JsFiddle

在这里,我已经包括keydown和焦点

 $('#email').bind("keyup keydown change focus blur", function() { 

并在下面改变

  $('input').bind("keydown", function() { 

jQuery有另一个叫做input事件。

 $('#email').bind("input", function() { 

更新了jsFiddle