getElementsByName() 不起作用?

IT技术 javascript html codeigniter getelementsbyname
2021-01-29 17:45:52

我有一个 Javascript 函数,它应该使用每次调用函数时递增的数字更新表单中隐藏的输入字段。

它最初与getElementById()一起工作,但是因为我必须重新设计我的表单,我无法使用 php 函数为元素分配一个单独的 ID,所以我只有该元素的唯一名称。

因此,我决定使用Javascript 中的getElementsByName()来修改元素。

这是该元素的 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个回答

document.getElementsByName()返回一个NodeList,因此您必须通过索引访问它:(document.getElementsByName('staff_counter')[0]取决于您拥有多少个)。

您还可以访问一个length属性来检查匹配了多少元素。

不是一个数组。这是一个NodeList. 巨大差距。
2021-03-29 17:45:52

刚刚有一个类似的问题,我用一个简单的数组循环解决了它。下面的代码将通过并禁用所有名为“btnSubmit”的按钮。

for (var i=0;i<document.getElementsByName('btnSubmit').length;i++){
    document.getElementsByName('btnSubmit')[i].disabled=true;
}
将 getElements... 移出循环 var _elements = document.getElementsByName('btnSubmit'); for (var i=0;i<_elements.length;i++){ _elements[i].disabled=true; }
2021-04-05 17:45:52