JQuery - 表单提交 - 多次?
JQuery - Form Submit - Many times?
我有一个快速问题,关于我的 javascript 代码,我有这个:
$('form').submit( function (e) {
var form = $(this);
console.log('submit attempt');
$('input, select, textarea').each(function() {
var attr = $(this).attr('required');
if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '') ) {
if($(this).hasClass('numeric')) {
if(isNumber($(this).val())) {
$(form).submit();
}
}
else {
$(form).submit();
}
}
else {
e.preventDefault();
$(this).css('border','1px solid red');
}
});
});
在控制台日志中,我收到了 1300 多条 'submit attempt' 消息,然后是一个错误:
Uncaught RangeError: Maximum call stack size exceeded
你们知道为什么会发生这种情况以及如何解决吗?也许我忘记了关于 submit() 的一些棘手的事情?
如果需要更多信息,请告诉我。
谢谢!
如果没有错误,表单将与每个输入或文本区域一起提交。
所以,首先循环字段,定义是否有失败。如果没有,请发送:
$('form').submit(function(e) {
var form = $(this);
var failure = false;
console.log('submit attempt');
$('input, select, textarea').each(function() {
var attr = $(this).attr('required');
if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '')) {
failure = true;
$(this).css('border', '1px solid red');
}
if ($(this).hasClass('numeric') && !isNumber($(this).val())) {
failure = true;
$(this).css('border', '1px solid red');
}
});
if (failure) {
e.preventDefault();
}
});
问题是您在递归调用它的提交中再次提交表单。这就是你应该做的。如果验证失败 isValid 包含 false 并停止提交表单;
$('form').submit(function(e){
var isValid = true;
$('input, select, textarea').each(function() {
var attr = $(this).attr('required');
if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '') ) {
if($(this).hasClass('numeric')) {
if(!isNumber($(this).val())) {
isValid = false;
return isValid;
} else {
e.preventDefault();
$(this).css('border','1px solid red');
}
}
}
else {
e.preventDefault();
$(this).css('border','1px solid red');
isValid = false;
return isValid;
}
});
return isValid;
});
我有一个快速问题,关于我的 javascript 代码,我有这个:
$('form').submit( function (e) {
var form = $(this);
console.log('submit attempt');
$('input, select, textarea').each(function() {
var attr = $(this).attr('required');
if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '') ) {
if($(this).hasClass('numeric')) {
if(isNumber($(this).val())) {
$(form).submit();
}
}
else {
$(form).submit();
}
}
else {
e.preventDefault();
$(this).css('border','1px solid red');
}
});
});
在控制台日志中,我收到了 1300 多条 'submit attempt' 消息,然后是一个错误:
Uncaught RangeError: Maximum call stack size exceeded
你们知道为什么会发生这种情况以及如何解决吗?也许我忘记了关于 submit() 的一些棘手的事情?
如果需要更多信息,请告诉我。
谢谢!
如果没有错误,表单将与每个输入或文本区域一起提交。
所以,首先循环字段,定义是否有失败。如果没有,请发送:
$('form').submit(function(e) {
var form = $(this);
var failure = false;
console.log('submit attempt');
$('input, select, textarea').each(function() {
var attr = $(this).attr('required');
if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '')) {
failure = true;
$(this).css('border', '1px solid red');
}
if ($(this).hasClass('numeric') && !isNumber($(this).val())) {
failure = true;
$(this).css('border', '1px solid red');
}
});
if (failure) {
e.preventDefault();
}
});
问题是您在递归调用它的提交中再次提交表单。这就是你应该做的。如果验证失败 isValid 包含 false 并停止提交表单;
$('form').submit(function(e){
var isValid = true;
$('input, select, textarea').each(function() {
var attr = $(this).attr('required');
if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '') ) {
if($(this).hasClass('numeric')) {
if(!isNumber($(this).val())) {
isValid = false;
return isValid;
} else {
e.preventDefault();
$(this).css('border','1px solid red');
}
}
}
else {
e.preventDefault();
$(this).css('border','1px solid red');
isValid = false;
return isValid;
}
});
return isValid;
});