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