在for-in-Loop之后执行代码的问题

时间:2015-09-07 07:50:09

标签: javascript forms for-loop submit

我有一个包含多个动态行的表单,我想在提交表单之前对输入进行一些验证,例如检查所有字段是否都有输入等。 所以当我在提交按钮上有一个onclick-Event时,我会调用这个小功能:

function validateAndSubmit() {
var form = document.getElementById("mainForm");
var formGroups = document.getElementsByClassName("form-group");
for (var x in formGroups) {
    // Validation goes here
    ....
    if (valid == false) {
        return;
    }
}
form.submit();

所以在我的逻辑中,代码应该迭代每个表单组(基本上代表表单中的各个行)并检查它们是否有效。在第一个无效行之后,函数将返回而没有任何结果。但是如果选中了所有formGroup,for-Loop将退出,form.submit();调用将提交表单。

但是,最终提交不会发生。即使所有表单元素都有有效输入,表单也不会提交。但是,在一些调试过程中,我注释掉了整个for循环,并且表单提交了,但当然没有验证。 所以我假设for循环不能正常退出,并且可能需要一些帮助解决这个问题。

整个项目是用普通的Javascript编写的,但是,我用来动态添加和删除项目的库基于jQuery的表单。

作为参考,您可以在线找到该项目here

2 个答案:

答案 0 :(得分:2)

你不应该首先使用for-in。只需使用plain表格:

for(var i=0;i<formGroups.length;i++)

请记住,for-in适用于Objects / dictionaries。例如。 { '键': '值'}

你在循环中得到的第一个“x”是“length” - 你的formGroups [x]变成formGroups [undefined]并立即抛出异常。

答案 1 :(得分:0)

您还可以使用jQuery选择器来获取元素。在您的示例中,

$('.form-control').each(function() {
    // Validation goes here
    console.log($(this));
});