Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.each()循环中的JavaScript数组不添加新元素_Javascript_Jquery_Arrays_Forms_Validation - Fatal编程技术网

.each()循环中的JavaScript数组不添加新元素

.each()循环中的JavaScript数组不添加新元素,javascript,jquery,arrays,forms,validation,Javascript,Jquery,Arrays,Forms,Validation,我正在使用HTML5的“模式”属性和相应的JS测试一些表单验证。完全公开,我坚持使用IE 11,如果这有什么区别的话 到目前为止,我已经能够让脚本循环并从HTML输入中提取模式,并将它们转换为.test()方法的RegExp。验证部分似乎正在工作 我希望将表单输入存储到数组中,例如:formData[fieldData,fieldData,fieldData] …并将其验证状态存储到另一个数组中,例如:validationStates[true,false,true] …然后启用提交按钮一次。e

我正在使用HTML5的“模式”属性和相应的JS测试一些表单验证。完全公开,我坚持使用IE 11,如果这有什么区别的话

到目前为止,我已经能够让脚本循环并从HTML输入中提取模式,并将它们转换为.test()方法的RegExp。验证部分似乎正在工作

我希望将表单输入存储到数组中,例如:formData[fieldData,fieldData,fieldData]

…并将其验证状态存储到另一个数组中,例如:validationStates[true,false,true]

…然后启用提交按钮一次。every()validationStatetrue(代码中还没有)

我的问题是,我的数组只有1个元素长-新值没有被.push()加载到它们。控制台始终报告每个数组的长度为.length 1,就好像在循环的每个过程中它都被覆盖一样(如您所见,我还尝试了一个非破坏性的.splice()。我做错了什么

$(“输入”).change(函数(){
console.clear();
$(“[必需]”)。每个(函数(索引){//查找所有必需的表单字段
var fieldData,regex;//初始化变量
var formData=[];//表单输入数据的初始化数组
var validationStates=[];//验证状态的初始化数组
fieldData=$(this).val();//获取表单值并存储
regex=newregexp($(this).attr(“pattern”);//从模式中提取regex
splice(index,0,fieldData);//将字段输入存储在数组中
验证states.push((regex.test(fieldData));
console.log(formData);
控制台日志(索引);
console.log(validationStates);
});
});
.form控件,.btn{
边缘顶部:10px;
}
输入:无效,文本区域:无效{
边框:1px虚线#F33!重要;
颜色:#E33!重要;
}
输入:有效,文本区域:有效{
边框:1px点#2C8!重要;
颜色:#2C8;
}

提交表格

在.change()和.each()循环之前声明数组。。。 在循环中最好使用let而不是var

解释性编辑: 您所做的是声明新数组的每个循环的每次迭代。。所以它只包含一个元素

编辑: 好吧,现在我重读。。。使用数组来存储验证状态是毫无意义的。。。只需做如下操作:

change() {
    let errors = false;
    each() {
        errors = !Regexp.isItValid(input)
    }
    if(!errors)
        proceed()
}
伪代码,但你明白我的意思


我知道现在内存很便宜,但你仍然不应该无缘无故地浪费它…

事实上,它应该在.change方法之上,否则每次输入更改时它都会被覆盖。这正是他想要编辑的:好的,不,你是对的。。。没有阅读完整的代码。。。编辑回答谢谢你们!我将两个数组声明都移到了$(“input”).change()上方,这就解决了问题-现在我只需要处理按钮启用部分。@LaurentSchwitter Re:您最近的编辑:我刚刚用错误标志再次尝试了一些操作,结果成功了!你是对的;这是一个更清洁的解决方案。再次感谢你!