我有一个表格,其中添加了多个动态行,并且我希望在提交表单之前对输入进行一些验证,例如,检查所有字段是否有输入等。 所以我把这个小功能,当我在我的提交按钮有一个onclick-事件:for循环中执行代码的问题
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();
所以在我的逻辑,代码应该遍历每个表单组(这基本上代表了各行表格)并检查它们是否有效。在第一个无效行之后,函数将返回而没有任何结果。但是,如果所有formGroups都被选中,for-Loop将退出并且调用将提交表单。
但是,最终的提交没有发生。即使所有表单元素都有有效的输入,表单也不会提交。然而,在一些调试过程中,我将整个for循环注释掉了,表单提交了,但是当然没有验证。 所以我假设for-loop不能正常退出,并且可能需要一些帮助来解决这个问题。
整个项目是用纯Javascript编写的,但是,我正在使用库来动态地添加和删除项目到基于jQuery的表单。
仅供参考,你可以找到该项目的在线here
虽然你的答案是正确的,这是一个有趣的事情,那'在OP代码formGroups'实际上是一个对象,而不是一个数组。你能解释一下这个区别吗? – Teemu
谢谢,您指出了一个有趣的事实:Array是javascript中的一种对象,.length()是Array对象的一种方法。正确的词应该是“for-in仅适用于词典...” –
其实我是在[HTMLCollection](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection)之后是一个对象,而不是一个数组。 – Teemu