2015-10-19 64 views
3

我有循环虽然表单值,它工作很好,抛出基于输入名称的值。但我也希望能够通过特定元素ID进行定位。按名称的JavaScript循环窗体的值,然后元素ID

这是一个例子形式:

_inputFields: function() { 
    var rows = []; 
    for(var i = 1; i <= 12; i++) { 
     var placeHolder = 'Intro text line ' + i; 
     var inputID = 'inputIntroText ' + i; 
     rows.push(<input type="text" className="form-control input-size-lg" name="formInput" id="inputText" placeholder={placeHolder}/>); 
     rows.push(<input type="text" className="form-control input-size-lg" name="formInput" id="inputTime" placeholder={placeHolder}/>); 
    } 

这样我就可以循环并抓住按名称即为“的formInput”但一切怎么能我然后抓住formInput[inputText]formInput[inputTime]

这是一个通过值我目前的循环:

// gather form input 
var elem = document.getElementsByName('formInput'); 
console.log(elem); 

// Build the object 
var obj = { 
    "DataObject": { 
     "user": { 
      "-name": "username" 
     }, 
     "contentFile": { 
      "-filename": "Breaking_News", 
      "lock": { 
       "-fileIsBeingEdited": "false" 
      }, 
      "content": { 
       "line": [] 
      } 
     } 
    } 
}; 

var line = obj.DataObject.contentFile.content.line; 
for (var i = 0; i < elem.length; i++) { 
    if (elem[i].value != '') { 
     line.push({ 
      "-index": i, 
      "-text": elem[i]['inputText'].value, 
      "-time": elem[i]['inputTime'].value 
     }); 
    } 
}; 

如果我尝试:

"-text": elem[i]['inputText'].value, 
"-time": elem[i]['inputTime'].value 

我得到的错误:Cannot read property 'value' of undefined

+0

你可以创建一个小提琴吗? – optic

+0

只需使用'“-text”:elem [i] .id' –

+0

您的逻辑错误。当你执行'document.getElementsByName('formInput');'时,你会得到两个输入元素具有相同的名称和不同的ID。为什么你以后想在一次迭代中访问这两个?解释器是正确的告诉你'不能读取未定义的属性'值',因为你尝试访问的索引不存在于你elems数组中 – kennasoft

回答

0

您可以使用elem[i].id

var line = obj.DataObject.contentFile.content.line; 
    for (var i = 0; i < elem.length; i++) { 
    if (elem[i].value != '') { 
     line.push({ 
     "-index": i, 
     "-text": elem[i].id 
     // Since you are looping through the inputs, you will get the `inputTime` in the 2nd iteration. 
    }); 
    } 
}; 
1

此错误是因为elem[i]['inputText']undefined。这是因为您正在尝试查找元素的inputText属性,该属性不存在。

elem是一个数组,因此我建议使用类似filter的东西。

"-text": elem.filter(function(item) { 
    return item.id === 'inputText'; 
})[0].value; 

此外,你应该删除for循环或你会得到一个重复的行。

function getElementById(elems, id){ 
    return elems.filter(function(item) { 
     return item.id === id; 
    })[0]; 
} 

var line = obj.DataObject.contentFile.content.line; 
line.push({ 
    "-text": getElementById(elem, 'inputText').value, 
    "-time": getElementById(elem, 'inputTime').value 
}); 

下面是一个例子jsfiddle

+0

嗨,感谢您的帮助,当试图运行你的代码时for循环)我得到的错误'elem'没有在这行定义:“-text”:getElementById(elem,'inputText')。value, – chinds

+0

@chinds我已经给我的答案添加了一个jsfiddle的例子。这些值是空的,因为它可以在输入设置之前运行,但它不会出错。 –

+0

tahnks和我刚才看到我的错误:/我不小心删除了宣布elem的第一行。再次感谢。 – chinds