Javascript parseInt(x,10)导致最大调用堆栈/太多递归错误

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

我有一个简单的JS函数,它根据2个输入值更新一个隐藏的文本框

在更新隐藏文本框之前,我使用parseInt(x,10)验证输入是否为数字,如果不是,则将值设置为0

为什么这会导致太多的递归错误

  $(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,还有更多代码。用户界面实际上强制使用数字。这是一个额外的回退和空值支持。它也在后端重新验证。