Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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
JavaScript-在';对于';环_Javascript_Php_Html_Forms - Fatal编程技术网

JavaScript-在';对于';环

JavaScript-在';对于';环,javascript,php,html,forms,Javascript,Php,Html,Forms,这是我第一个真实的JavaScript项目。请善待我 我正在创建一个带有必填字段的表单。使用JavaScript,我将所需字段收集为数组中的对象,每个对象都有属性“object”(HTML对象本身,我可以从中获得object.id和object.value)“description”(向用户显示)和“error”(每个输入字段下出现相应验证错误的HTML对象) 然后我有一个函数(用于模糊,用于即时反馈),它检查字段的值是否为空,如果为空,它会在相应字段下显示验证错误 我正在尝试使用一个for循环

这是我第一个真实的JavaScript项目。请善待我

我正在创建一个带有必填字段的表单。使用JavaScript,我将所需字段收集为数组中的对象,每个对象都有属性“object”(HTML对象本身,我可以从中获得object.id和object.value)“description”(向用户显示)和“error”(每个输入字段下出现相应验证错误的HTML对象)

然后我有一个函数(用于模糊,用于即时反馈),它检查字段的值是否为空,如果为空,它会在相应字段下显示验证错误

我正在尝试使用一个for循环为每个输入字段设置onblur属性,该循环在必填字段数组中运行。我有一个setAttribute语句,如果我为数组中的每个对象分别创建一个单独的语句,它就可以完美地工作。但是,只要我将其更改为FOR循环,任何字段的onblur事件都只会弹出第一个输入字段的验证错误。这一定是一个新生的错误,但我已经到处搜索,用十种不同的方式重写了这件事,但无法使它与循环一起工作

我把我的代码放在一个文件夹中,这样你就可以看到它了——但它实际上并不能在小提琴中工作,只能在我的本地开发环境中工作(也许这表明了另一个问题?)。代码如下:

//使用构造函数创建数组以标识所有必需字段
var allRequired=[];
功能要求字段(ID、说明){
this.object=document.getElementById(theID);
this.description=描述;
this.error=document.getElementById(“error-”+theID);
全部必需。推(此);
}
var fieldFname=新的必填字段(“fname”、“名字”);
var fieldLname=新的必填字段(“lname”、“姓氏”);
var fieldEmail=新的必填字段(“电子邮件”、“电子邮件”);
var fieldPhone=新的必填字段(“电话”、“电话”);
var fieldRole=新的required字段(“角色”、“所需角色”);
var fieldPortfolio=新的必填字段(“投资组合”、“投资组合/网站URL”);
功能要求字段(说明、值、错误){
如果(值==“”){
error.innerHTML=“”+说明+”是必需的。

”; }否则{ theError.innerHTML=“”; } }//结束函数 对于(i=0;i


名字:

姓氏:

电邮:

电话:

所需角色:

投资组合/网站:

代码

for (i = 0; i < allRequired.length; i++) {
    allRequired[i].object.setAttribute("onBlur", "requireField(allRequired[i].description, allRequired[i].object.value, allRequired[i].error);");
}
看到了吗?每次迭代我都会得到真实的
I
值。

code


看到了吗?每次迭代我都会得到真正的
I
值。

正如u_mulder所说的那样。
至于代码,我建议查找工厂函数。它比构造函数更自然。

正如u_mulder所说的,它解决了这个问题。
至于代码,我建议查找工厂函数。它比构造函数更自然。

ahhh。。。当然现在看来这是显而易见的。非常感谢!啊。。。当然现在看来这是显而易见的。非常感谢!酷-谢谢你的建议。我不熟悉工厂函数,所以为了学习和改进,我做了几次搜索,并将构造函数更改为FF,效果很好。在这种情况下(或一般情况下)有什么好处?构造函数的问题是那些用C#或其他类型的OOP语言编程的人(我在这里做假设)决定用javascript做同样的事情,这是错误的,因为javascript是过程语言(并且拥有一种很多人都讨厌的语言)并且已经有了第一类函数(不仅可以返回值,还可以返回对象、函数的函数),所以构造函数本身就是一个失败的尝试,试图使javascript OOP语言不仅是而且只会带来问题。工厂更具灵活性和可测试性。(真实javascript)很酷-谢谢你的建议。我不熟悉工厂函数,所以为了学习和改进,我做了几次搜索,并将构造函数更改为FF,效果很好。在这种情况下(或一般情况下)有什么好处?构造函数的问题是那些用C#或其他类型的OOP语言编程的人(我在这里做假设)决定用javascript做同样的事情,这是错误的,因为javascript是过程语言(并且拥有一种很多人都讨厌的语言)并且已经有了第一类函数(不仅可以返回值,还可以返回
for (i = 0; i < allRequired.length; i++) {
    allRequired[i].object.setAttribute("onBlur", "requireField(allRequired[" +i + "].description, allRequired[" + i + "].object.value, allRequired[" + i + "].error);");
}