即使有preventdefault
和returnvalue = false
,表单仍会在IE中提交。
在Chrome和Firefox中一切都很好。
我也试过event.stopPropagation()
。
$('#form1').submit(function(event) {
var xxx = $('#xxx').val();
var yyy = $('#yyy').val();
var zzz = $('#zzz').val();
var uuu = $('#uuu').val();
if (zzz != '000000' && zzz != '') {
validate_xxxyyy(uuu, function(response) {
if (response === false) {
if (xxx == '') {
alert("XXX undefined!");
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
else if (yyy == '') {
alert("yyy Undefined!");
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
}
else {
return true;
}
});
}
else {
return true;
}
});
function validate_xxxyyy(uuu, callback) {
var data_string = 'uuu=' + uuu;
$.ajax({
url: 'ajax.php',
type:'POST',
data: data_string,
dataType: 'json',
cache: false,
async: false,
success: function(response){
callback(response);
}
});
}
答案 0 :(得分:2)
首先阻止表单提交,异步执行ajax调用验证,如果验证,则使用事件处理程序未捕获的本机提交进行提交:
$('#form1').on('submit', function(event) {
event.preventDefault();
var self = this,
xxx = $('#xxx').val(),
yyy = $('#yyy').val(),
zzz = $('#zzz').val(),
uuu = $('#uuu').val();
if (zzz != '000000' && zzz != '') {
validate_xxxyyy(uuu).done(function(response) {
if (!response) {
if (xxx == '') {
alert("XXX undefined!");
}
else if (yyy == '') {
alert("yyy Undefined!");
}
}
else {
self.submit();
}
});
} else {
self.submit();
}
});
function validate_xxxyyy(uuu) {
var data_string = 'uuu=' + uuu;
return $.ajax({
url: 'ajax.php',
type:'POST',
data: data_string,
dataType: 'json',
cache: false
});
}
答案 1 :(得分:1)
您的问题在deffered functions左右。
你的成功功能在:
$.ajax({
url: 'ajax.php',
type:'POST',
data: data_string,
dataType: 'json',
cache: false,
async: false,
success: function(response){
callback(response);
}
});
是defferred。把它想象为线程。所以submit
继续而不等待回调发生。因此,它不会调用event.preventDefault()
,或者更准确地说,它确实如此,但为时已晚,提交已经返回。
我会改变从提交按钮(我猜它是当前的)到正常按钮然后验证它,然后只有在使用$('form').submit();
验证成功时才提交表单。
$('#button').click(function(event) {
var xxx = $('#xxx').val();
var yyy = $('#yyy').val();
var zzz = $('#zzz').val();
var uuu = $('#uuu').val();
if (zzz != '000000' && zzz != '') {
validate_xxxyyy(uuu, function(response) {
if (response === false) {
if (xxx == '') {
alert("XXX undefined!");
}
else if (yyy == '') {
alert("yyy Undefined!");
}
}
else {
$('#form1').submit();
}
});
}
else {
$('#form1').submit();
}
});
function validate_xxxyyy(uuu, callback) {
var data_string = 'uuu=' + uuu;
$.ajax({
url: 'ajax.php',
type:'POST',
data: data_string,
dataType: 'json',
cache: false,
async: false,
success: function(response){
callback(response);
}
});
}
答案 2 :(得分:-1)
put:event.preventDefault()首先像:
$('#form1').submit(function(event) {
event.preventDefault();
var xxx = $('#xxx').val();
var yyy = $('#yyy').val();
...
或者您需要覆盖表单onsubmit事件以阻止提交:
答案 3 :(得分:-1)
$('#form1').submit(function(event) {
var xxx = $('#xxx').val();
var yyy = $('#yyy').val();
var zzz = $('#zzz').val();
var uuu = $('#uuu').val();
if (zzz != '000000' && zzz != '') {
validate_xxxyyy(uuu, function(response) {
if (!response) {
if (xxx == '') {
alert("XXX undefined!");
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
else if (yyy == '') {
alert("yyy Undefined!");
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
}
else {
return true;
}
});
}
else {
return true;
}
});