Javascript parseInt(x,10)导致最大调用堆栈/太多递归错误
我有一个简单的JS函数,它根据2个输入值更新一个隐藏的文本框 在更新隐藏文本框之前,我使用parseInt(x,10)验证输入是否为数字,如果不是,则将值设置为0 为什么这会导致太多的递归错误Javascript parseInt(x,10)导致最大调用堆栈/太多递归错误,javascript,jquery,recursion,Javascript,Jquery,Recursion,我有一个简单的JS函数,它根据2个输入值更新一个隐藏的文本框 在更新隐藏文本框之前,我使用parseInt(x,10)验证输入是否为数字,如果不是,则将值设置为0 为什么这会导致太多的递归错误 $(function () { $("#payment-form").on("submit",function (e) { var xDollars = $("#dollars").val(); var xCents = $("#cen
$(function () {
$("#payment-form").on("submit",function (e) {
var xDollars = $("#dollars").val();
var xCents = $("#cents").val();
//collect our form dollar and cents values, set to 0 if not int
if (parseInt(xDollars, 10) == "NaN") {
$("#dollars").val("0");
}
if (parseInt(xCents, 10) == "NaN") {
$("#cents").val("00");
}
//join dollars and cents and submit transaction amount
$("#TransactionAmount").val(xDollars + "." + xCents);
$("#payment-form").submit();
return true;
});
});
不是parseInt()
引起您的问题,而是:
$("#payment-form").submit();
您正在从“提交”处理程序内部触发“提交”操作
如果您只返回true
如果验证成功,则表单应正常提交。导致问题的不是parseInt()
,而是:
$("#payment-form").submit();
您正在从“提交”处理程序内部触发“提交”操作
如果验证成功,只返回
true
,则表单应正常提交。这是因为jQuery不区分您是通过submit
事件还是通过.submit()
方法提交表单。因此,如果使用jQuery的$.submit()
,它将手动触发submit
事件
改用香草js。根据,如果使用.submit()
,则不会触发该事件:
如果未设置Submited from方法标志,则
它冒泡并可取消,命名为
提交
,格式为。如果事件的默认操作被阻止(即。
如果事件已取消),则中止这些步骤。否则,请继续
(实际上,默认操作是执行提交)
因此,这不会有问题:
document.getElementById('payment-form').submit();
但在这种情况下,您可以删除
$(“#付款单”).submit()代码>。如果不取消该事件,则应自动提交表单。这是因为jQuery不区分您是通过submit
事件还是通过.submit()
方法提交表单。因此,如果使用jQuery的$.submit()
,它将手动触发submit
事件
改用香草js。根据,如果使用.submit()
,则不会触发该事件:
如果未设置Submited from方法标志,则
它冒泡并可取消,命名为
提交
,格式为。如果事件的默认操作被阻止(即。
如果事件已取消),则中止这些步骤。否则,请继续
(实际上,默认操作是执行提交)
因此,这不会有问题:
document.getElementById('payment-form').submit();
但在这种情况下,您可以删除$(“#付款单”).submit()代码>。如果不取消该事件,则应自动提交表单。您的错误与parseInt()
无关,因为出于某种奇怪的原因,您正在引发事件处理程序中捕获的事件。你为什么要再次调用submit()
?我很想知道为什么有人投票关闭这个?我认为这是一个非常合理的问题。仅仅从UI的角度来看。。如果其中任何一个值都是非数字的,是否要取消提交请求并显示表单错误?@PatrickRoberts,还有更多代码。用户界面实际上强制使用数字。这是一个额外的回退和空值支持。它也会在后端重新验证。您的错误与parseInt()
无关,因为出于某种奇怪的原因,您正在引发捕获在事件处理程序中的事件。你为什么要再次调用submit()
?我很想知道为什么有人投票关闭这个?我认为这是一个非常合理的问题。仅仅从UI的角度来看。。如果其中任何一个值都是非数字的,是否要取消提交请求并显示表单错误?@PatrickRoberts,还有更多代码。用户界面实际上强制使用数字。这是一个额外的回退和空值支持。它也在后端重新验证。