getElementsByName () не работает? - PullRequest
       22

getElementsByName () не работает?

17 голосов
/ 06 августа 2011

У меня есть функция Javascript, которая должна обновлять скрытое поле ввода в моей форме с помощью числа, которое увеличивается при каждом вызове функции.

Первоначально он работал с getElementById () , однако, поскольку мне пришлось изменить дизайн формы, я не могу использовать функцию php, чтобы назначить отдельный идентификатор для элемента, поэтому все, что у меня есть, - это уникальное имя для этого элемента.

Поэтому вместо этого я решил использовать getElementsByName () из Javascript для изменения элемента.

Вот HTML-код этого элемента

  <input type="hidden" value="" name="staff_counter">

Это мой код Javascript:

window.onload=function()
{

//function is activated by a form button 

var staffbox = document.getElementsByName('staff_counter');
                    staffbox.value = s;


                s++;
}

Я не получаю ошибок в Firebug, когда вызывается функция, а поле ввода не получает заданного ей значения.

Он работал с getElementById (), но почему вдруг он не работает с getElementsByName ()?

  • -Я проверил, что это единственный уникальный элемент в документе.
  • -Я проверил наличие ошибок в Firebug при активации функции

Вот код, который я использую из Codeigniter для создания элемента

// staff_counter is name and the set_value function sets the value from what is
//posted so if the validation fails and the page is reloaded the form element does
// not lose its value

echo form_hidden('staff_counter', set_value('staff_counter'));

Спасибо

Ответы [ 2 ]

30 голосов
/ 06 августа 2011

document.getElementsByName() возвращает NodeList , поэтому вы должны получить к нему доступ по индексу: document.getElementsByName('staff_counter')[0] (в зависимости от того, сколько из них у вас есть).

У вас также есть доступв length свойство, чтобы проверить, сколько элементов было найдено.

2 голосов
/ 11 января 2013

Просто была похожая проблема, я решил ее простым циклом над массивом. Код ниже будет проходить и отключать все кнопки с именем 'btnSubmit'.

for (var i=0;i<document.getElementsByName('btnSubmit').length;i++){
    document.getElementsByName('btnSubmit')[i].disabled=true;
}
...