user1228907
user1228907

Reputation: 399

getElementsByName won't loop through entire array

The following code executes on the press of a button. It works fine alerting one string of the getElementsByName array, but when introduced to a loop, it still only alerts the first string value, and nothing more:

function checkvals() {

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

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

Upvotes: 1

Views: 3216

Answers (2)

user1106925
user1106925

Reputation:

That's because getElementsByName only accepts one argument, so it's only fetching the first name.

You can build a full collection like this...

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]);
    }
}

Then loop over the input Array, (or just do your work in the inner loop).


Additionally, you have a bug.

This...

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

should be this...

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

...otherwise, you'll go one past the last index.

Upvotes: 3

ruakh
ruakh

Reputation: 183504

That's because getElementsByName only takes a single name argument, and returns all elements with that value for their name attribute. (See https://developer.mozilla.org/en/DOM/document.getElementsByName.) If you have multiple names to look up, you'll have to call it multiple times.

Upvotes: 0

Related Questions