JavaScript-在';对于';环
这是我第一个真实的JavaScript项目。请善待我 我正在创建一个带有必填字段的表单。使用JavaScript,我将所需字段收集为数组中的对象,每个对象都有属性“object”(HTML对象本身,我可以从中获得object.id和object.value)“description”(向用户显示)和“error”(每个输入字段下出现相应验证错误的HTML对象) 然后我有一个函数(用于模糊,用于即时反馈),它检查字段的值是否为空,如果为空,它会在相应字段下显示验证错误 我正在尝试使用一个for循环为每个输入字段设置onblur属性,该循环在必填字段数组中运行。我有一个setAttribute语句,如果我为数组中的每个对象分别创建一个单独的语句,它就可以完美地工作。但是,只要我将其更改为FOR循环,任何字段的onblur事件都只会弹出第一个输入字段的验证错误。这一定是一个新生的错误,但我已经到处搜索,用十种不同的方式重写了这件事,但无法使它与循环一起工作 我把我的代码放在一个文件夹中,这样你就可以看到它了——但它实际上并不能在小提琴中工作,只能在我的本地开发环境中工作(也许这表明了另一个问题?)。代码如下:JavaScript-在';对于';环,javascript,php,html,forms,Javascript,Php,Html,Forms,这是我第一个真实的JavaScript项目。请善待我 我正在创建一个带有必填字段的表单。使用JavaScript,我将所需字段收集为数组中的对象,每个对象都有属性“object”(HTML对象本身,我可以从中获得object.id和object.value)“description”(向用户显示)和“error”(每个输入字段下出现相应验证错误的HTML对象) 然后我有一个函数(用于模糊,用于即时反馈),它检查字段的值是否为空,如果为空,它会在相应字段下显示验证错误 我正在尝试使用一个for循环
//使用构造函数创建数组以标识所有必需字段
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);");
}