2015-10-19 45 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