如果存在ajax错误,jquery将阻止表单提交
我在这里找不到我想要的答案。我使用ajax检查数据库中是否存在用户名,如果用户存在,表单中会显示一个错误。但是如果存在错误,我会阻止表单提交。我尝试了event.preventDefault(),但我不确定是正确使用它,还是错误使用它 我的JS代码是:如果存在ajax错误,jquery将阻止表单提交,jquery,ajax,forms,submit,Jquery,Ajax,Forms,Submit,我在这里找不到我想要的答案。我使用ajax检查数据库中是否存在用户名,如果用户存在,表单中会显示一个错误。但是如果存在错误,我会阻止表单提交。我尝试了event.preventDefault(),但我不确定是正确使用它,还是错误使用它 我的JS代码是: $(".check").blur(function () { var username = $(".check").val(); $.ajax({ url: "validateUser.php",
$(".check").blur(function () {
var username = $(".check").val();
$.ajax({
url: "validateUser.php",
type: "post",
data: "username=" + username
}).done(function (result) {
if (result == "true") {
// CODE TO RUN IF ERROR DOESN'T EXIST
} else {
// CODE TO RUN IF ERROR DOES EXIST
// CREATE THE ERROR MESSAGE AND DISPLAYS IT
event.preventDefault();
}
});
});
为了防止表单提交,您必须在表单的JavaScript事件处理程序的
事件实例上调用preventDefault()
。您可以执行以下操作:
$("form").submit(function(){
return !$(this).hasClass("error");
});
$(".check").blur(function () {
var username = $(".check").val();
$.ajax({
url: "validateUser.php",
type: "post",
data: "username=" + username
}).done(function (result) {
if (result == "true") {
$("form").removeClass('error')
} else {
$("form).addClass("error");
}
});
});
因此,您的ajax将添加一个类错误,或者在其有效时将其删除。如果表单已提交,则如果存在类错误,则会取消该表单
Ajax是异步的,因此不能直接返回它。因为代码将继续运行,并且不会等待完成功能。请使用返回false
而不是e.preventDefault()
尝试以下操作:
$(".check").blur(function (event) {
// Prevent Default the event here...
event.preventDefault();
var username = $(".check").val();
$.ajax({
url: "validateUser.php",
type: "post",
data: "username=" + username
}).done(function (result) {
if (result == "true") {
// CODE TO RUN IF ERROR DOESN'T EXIST
$("form").submit();
} else {
// CODE TO RUN IF ERROR DOES EXIST
// CREATE THE ERROR MESSAGE AND DISPLAYS IT
$(this).focus();
alert('An error occurred!');
}
});
});
这里有几点:
您甚至没有在函数中添加事件
,而是调用了event.preventDefault()
如果结果为“true”
,您只需提交表单或运行代码即可
否则,只需将焦点
放回文本框并显示警报消息
对表单提交和模糊进行验证
function checkUsername(username) {
var username = $(".check").val();
return $.ajax({
url: "validateUser.php",
type: "post",
data: "username=" + username
}).then(function (result) {
var def = $.Deferred();
if (result == "true") {
// CODE TO RUN IF ERROR DOESN'T EXIST
def.resolve();
} else {
// CODE TO RUN IF ERROR DOES EXIST
// CREATE THE ERROR MESSAGE AND DISPLAYS IT
def.reject();
}
return def.promise();
});
}
$(".check").blur(checkUsername);
$("#myform").submit(function(e){
var self = this;
e.preventDefault();
checkUsername().done(function(){
// username was ok
self.submit();
});
});
根据你的评论,我认为你应该试试这个:
if (result == "true") {
$(this).closest('form').submit();
} else {
$(this).closest('form').submit(function(event){
event.preventDefault();
});
}
在blur上提交表单?@MohammadAdil-Yes-检查用户名是否在提交表单之前就已经存在使用返回false
而不是事件.preventDefault()
is karthikr==Vince?@MohammadAdil这是一个很好的例子:p在您试图阻止它的时候,事件已经发生了。到那时,事件已经发生了,返回false不会更好。效果很好,我必须稍微更新它以检查是否显示错误字段。如果是,那么我调用preventDefault,如果不是,那么我就不去管它。