我正在尝试使用html输入字段动态创建具有名称 - 值对的对象。这就是我到目前为止所做的:
var taskComplete = {
newTask: function(arg) {
var fieldObj = {},
selector = arg,
inputFields = document.getElementsByClassName(selector);
for (var i=0;i<inputFields.length;i++) {
var attrValue = inputFields[i].getAttribute("name"),
value = inputFields[i].value,
newFieldObj = fieldObj[i] = {[attrValue]: value };
console.log(newFieldObj);
}
}
}
taskComplete.newTask('input');
控制台日志输出:
Object {title: ""}
Object {description: ""}
Object {date: ""}
问题1: 我如何访问这些对象?他们都有相同的名字,例如。 &#39;对象&#39;所以&#39; object.title&#39;不起作用。
问题2: 有没有办法将这些对象组合成一个对象? 例如
var obj = {
title: "",
description: "",
date: "",
}
使用html的代码示例:codepen.io
希望这是有道理的。感谢您提供任何帮助。
答案 0 :(得分:3)
不清楚你要在这里做什么。
为什么不将这些属性分配给您已经拥有的fieldObj,而不是为循环的每次迭代创建一个新对象?
然后你可以在调用代码中返回该对象并用它做任何你想做的事情:
'use strict';
// ** TASK OBJECT ** //
var taskComplete = {
newTask: function(selector) {
var fieldObj = {},
inputFields = document.getElementsByClassName(selector);
for (var i = 0; i < inputFields.length; i++) {
var attrKey = inputFields[i].getAttribute("name"),
value = inputFields[i].value;
fieldObj[attrKey] = value;
}
return fieldObj;
}
}
var o = taskComplete.newTask('input');
console.dir(o);
答案 1 :(得分:3)
我会以相反的顺序回答你的问题,更有意义,你会看到。
问题2:有没有办法将这些对象组合成一个对象?
是的,我很高兴地通知你,你绝对可以。你在哪里
newFieldObj = fieldObj[i] = {[attrValue]: value };
简单地做
fieldObj[attrValue] = value;
这样做有以下几点:在fieldObj
上,这是一个普通的{}
设置一个以attrValue
的值命名的密钥,并将该密钥与值{{配对1}}
问题1:如何访问这些对象?他们都有相同的名字,例如。 &#39;对象&#39;所以&#39; object.title&#39;不起作用。
为了能够访问这些对象,您的value
方法应该返回它们。因此,在newTask
方法结束时,只需执行newTask
,就这样
return fieldObj;
然后将返回的值存储到一个新变量中,如下所示:
var taskComplete = {
newTask: function(arg) {
var fieldObj = {},
selector = arg,
inputFields = document.getElementsByClassName(selector),
attrValue,
value;
for (var i=0;i<inputFields.length;i++) {
attrValue = inputFields[i].getAttribute("name");
value = inputFields[i].value;
fieldObj[attrValue] = value;
}
return fieldObj;
}
}
以下是修改过的笔: http://codepen.io/anon/pen/XdjKQJ