2012-02-25 82 views
1

下面的代碼在按下按鈕時執行。它工作正常,提醒getElementsByName陣列中的一個字符串,但是當介紹到一個循環,它仍然只提醒第一個字符串值,僅此而已:getElementsByName將不會遍歷整個陣列

function checkvals() { 

var input = document.getElementsByName('ModuleTitle', 'ModuleCode', 'BuildingName', 'Day'); 
var i = 0; 

for (i = 0; i <= input.length; i++){ 
alert(input[i].value); 
} 
} 

回答

0

這是因爲getElementsByName只需要name參數,並返回具有該值的所有元素的name屬性。 (請參閱https://developer.mozilla.org/en/DOM/document.getElementsByName。)如果要查找多個name s,則必須多次調用它。

+0

但它仍然只提醒一個值,即使我這樣做: 功能checkvals(){ 變種輸入= document.getElementsByName( 'ModuleTitle', 'ModuleCode', 'BuildingName', '日'); alert(input [0] .value); alert(input [1] .value); alert(輸入[2] .value); alert(輸入[3] .value); } – user1228907 2012-02-25 23:58:08

3

這是因爲getElementsByName只接受一個參數,所以它只提取第一個名字。

你可以建立一個完整的集合是這樣的...

var names = ['ModuleTitle', 'ModuleCode', 'BuildingName', 'Day']; 

var input = []; 
for(var i = 0; i < names.length; i++) { 
    var name_els = document.getElementsByName(names[i]); 
    for(var j = 0; j < name_els.length; j++) { 
     input.push(name_els[j]); 
    } 
} 

然後在input陣列,(或只是做你的工作在內環)循環。


此外,你有一個錯誤。

這...

for (i = 0; i <= input.length; i++){ 

應該是這樣的......

for (i = 0; i < input.length; i++){ 

...否則,你會去一個過去的最後一個索引。