2015-05-09 211 views
0

我有20个文本框名字,姓氏,电子邮件等......我想使用for循环创建这些文本框值的对象。如何在javascript中使用for循环创建对象

var object = {}; 
for (var x = 0; x; x++) { 

这就是我试图得到尽可能结果:

Object {name: "gill", lastname: "bill", email: "[email protected]"} 
+1

如果你正在使用jQuery,来看看这个选择:http://stackoverflow.com/questions/ 10322891 /循环遍历所有文本框在窗体使用jquery –

回答

1
var inputs = ...; 

var obj = {}; 
for (var i = 0; i < inputs.length; i++) 
    obj[inputs[i].name] = inputs[i].value; 

您在...如何填补取决于你的投入是如何在你的HTML定义,你想怎么组他们。如果您想选择所有页面上的输入,你可以使用

var inputs = document.getElementsByTagName('input'); 

但可以给你怪异的行为,如果你曾经添加其他输入就像一个搜索栏到您的网页。

如果你所有的领域都包含有一个id一些祖先元素中,你可以使用:

var inputs = document 
    .getElementById('ancestorId') 
    .getElementsByTagName('input') 
; 
+0

很好。你也可以将输入的长度附加到一个变量上,以便它只计算一次,而不是在每次循环迭代中计算。如果长度很小,它可能不会增加很多性能,但是你永远不知道后面的情况会如何增长。 – bpbutti

+0

@bpbutti我怀疑它有什么区别。我认为解释器足够聪明,可以看到你没有修改该循环内部的长度,而length属性只是一个属性查找。这不像访问length属性导致数组被计数。阅读'length'属性与阅读Javascript中任何对象的任何属性没有什么不同。 'length'属性在修改时只有特殊的行为。 – Paulpro

+0

是的,我认为你是对的。我搜索了更多关于它的信息,它似乎没有再有所作为了。也许我一直在阅读一些关于这一点的旧书。发动机现在很聪明,缓存长度可能会让事情变慢。即使它在某些情况下有助于表现一点点,但它是不值得的。感谢您的高举。 – bpbutti