2011-08-06 53 views
16

我有一個Javascript函數,它應該用每次調用該函數時遞增的數字更新我的表單中隱藏的輸入字段。getElementsByName()不工作?

它與的getElementById()然而,因爲我不得不重新設計自己的狀態,我不能使用PHP函數單獨的​​ID分配給該元素,因此所有我已經是該元素的唯一名稱,最初的工作。

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

這裏是一個元素

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

這是我的Javascript代碼的HTML:

window.onload=function() 
{ 

//function is activated by a form button 

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


       s++; 
} 

我越來越對Firebug的任何錯誤當函數被調用,並輸入字段是沒有得到賦予它的價值。

它使用getElementById(),但爲什麼突然它不能使用getElementsByName()?

  • - 我已檢查它是文檔中唯一唯一的元素。
  • -I激活功能

這裏時檢查上螢火蟲任何錯誤是我從笨使用,使該元件

// 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')); 

由於

+0

s是如何初始化的? – yokoloko

+0

檢查了這一點http://stackoverflow.com/a/43795346/5289704 –

回答

27

document.getElementsByName()返回一個數組的代碼,所以你必須通過索引來訪問它:document.getElementsByName('staff_counter')[0](取決於你有多少個)。

您還可以訪問length屬性以檢查有多少個元素匹配。

+0

只有一個,所以我猜數組中的位置0,謝謝! – sqlmole

+4

它不是**數組。這是一個['NodeList'](https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array.3F)。巨大差距。 – Pacerier

3

剛剛有一個類似的問題,我用一個簡單的循環遍歷數組解決了它。下面的代碼將通過並禁用所有名稱爲'btnSubmit'的按鈕。

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

move getElements ... out of cycle var _elements = document.getElementsByName('btnSubmit'); (var i = 0; i <_elements.length; i ++){ _elements [i] .disabled = true; } – andrej

相關問題