【发布时间】:2016-09-14 10:36:36
【问题描述】:
我有一个简短的问题,关于我的 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 多条“提交尝试”消息,然后出现错误:
未捕获的 RangeError:超出最大调用堆栈大小
你们知道为什么会发生这种情况以及如何解决吗?也许关于 submit() 的一些棘手的事情我忘记了?
如果需要更多信息,请告诉我。
谢谢!
【问题讨论】:
-
你应该从循环中删除
$(form).submit();,因为它会导致多个表单递归提交。 -
问题是您在提交中再次提交表单,递归调用它
-
哦,对了!您知道如何在 if 条件下提交表单而不使其进入循环吗?我的意思是:如果条件为真发送表单,否则 preventDefault.... 在条件上不写就足够了?
-
如果您的 .submit() 事件处理程序在没有
e.preventDefault()的情况下结束,则表单将提交。您可以随时return(注意不要从$.each中的内联函数返回)
标签: javascript jquery forms submit