getElementsByName не будет перебирать весь массив - PullRequest
1 голос
/ 26 февраля 2012

Следующий код выполняется при нажатии кнопки.Он отлично работает, предупреждая одну строку массива 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);
}
}

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Это потому, что 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 Array, (или просто выполняйте свою работу во внутреннем цикле) .


Кроме того, у вас есть ошибка.

Это ...

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

должно быть таким ...

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

... в противном случае вы пройдете один последний индекс.

0 голосов
/ 26 февраля 2012

Это потому, что getElementsByName принимает только аргумент single name и возвращает все элементы с этим значением для их атрибута name. (См. https://developer.mozilla.org/en/DOM/document.getElementsByName.) Если у вас есть несколько name s для поиска, вам придется вызывать его несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...