2011-08-06 5 views
16

Mam funkcję JavaScript, która powinna aktualizować ukryte pole wejściowe w mojej formie z liczbą, która zwiększa się za każdym razem, gdy funkcja jest wywoływana.getElementsByName() nie działa?

Udało się pierwotnie z getElementById() jednak ponieważ musiałem przeprojektować mojego formularza nie można korzystać z funkcji php przypisać indywidualny identyfikator elementu, więc wszystko, co mam jest unikalną nazwę dla tego elementu.

Zamiast tego postanowiłem użyć getElementsByName() z Javascript, aby zmodyfikować ten element.

Oto HTML tego elementu

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

To jest mój kod JavaScript:

window.onload=function() 
{ 

//function is activated by a form button 

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


       s++; 
} 

otrzymuję żadnych błędów na Firebug, gdy funkcja jest wywoływana i pole wejściowe nie robi wartość podana.

Pracował z getElementById(), ale dlaczego nagle nie działa z getElementsByName()?

  • - Sprawdziłem, czy jest to jedyny unikalny element w dokumencie.
  • -I sprawdzane za ewentualne błędy w Firebug, gdy uaktywnienie funkcji

Oto kod używam z CodeIgniter aby elementowi

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

Dzięki

+0

W jaki sposób zainicjowano? – yokoloko

+0

sprawdź to http://stackoverflow.com/a/43795346/5289704 –

Odpowiedz

27

document.getElementsByName() zwraca tablicę, więc musisz uzyskać do niego dostęp poprzez indeks: document.getElementsByName('staff_counter')[0] (w zależności od tego, ile masz).

Masz również dostęp do właściwości length, aby sprawdzić, ile elementów zostało dopasowanych.

+0

Tylko jedna osoba, więc zgaduję pozycję 0 w tablicy, Dziękuję! – sqlmole

+4

To ** nie ** tablica. To jest ['NodeList'] (https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array.3F). Duża różnica. – Pacerier

3

Po prostu miałem podobny problem, rozwiązałem go za pomocą prostej pętli nad tablicą. Poniższy kod przełączy się i wyłączy wszystkie przyciski o nazwie "btnSubmit".

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

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