ďťż

[JavaScript] Pętla przez elementy formularza

       

Podstrony


telcocafe

Jak w temacie jak zrobić pętle przez elementy formularza przy użyciu Javascript
Chodzi o skrypt do greasemonkey

Taki jeden pan z innego forum powiedzial mi tak:

lecisz sobie w petli po polach formularza i wypelniasz w kolejnosci. Zawsze wiesz, ze wystapi najpierw imie, potem nazwisko, potem adres etc.

http://www.developer...pt-051209-1018/


Tylko ze w ogóle nie wiem o co mu chodzi, jak taka pętle wykonac? Mam niby podany tutorial ale prosze wytlumaczyc czy taki skrypt uzupelnial by formularz?



jeśli znasz ID formularza, to odnosisz się przez: document.forms['id']
jeśli wiesz, który to formularz w kolejności: document.forms[0] (liczymy od 0)

Pętla wygląda tak:
var elementy = document.forms['id'].elements; var ile = elementy.length; for(var i=0; i<ile; i++) { alert( elementy[i].value ); //wyświetla komunikat z atrybutem "value" każdego elementu }
Użytkownik Ferrari edytował ten post 10 czerwiec 2010, 14:20
Mozna powiedziec ze znam id ale one sie zmienia. A nie jestem jasnowidzem.
Ok zobacze ten od 0
A jak zrobic aby wybieralo mi z listy rozsuwanej? Do petli.

Dziala juz :)
Jeszcze tylko musze pomyslec jak wygladalby kod ktory wybiera z listy rozwijanej.

Jednak jest maly problem;/
Jest np cos takiego:
Sa dwa pola gdy ten kod co podales wypelnia pierwsze pole to zaraz potem i drugie...

Chocby niewiadomo ile pol bylo caly czas tym pierwszym wyrazem uzupelnia.

var elementy = document.forms[0].elements; var ile = elementy.length; for(var i=0; i<ile; i++) { elementy[i].value = 'Pierwsze'; } var elementy = document.forms[1].elements; var ile = elementy.length; for(var i=0; i<ile; i++) { elementy[i].value = 'drugie';



Nie rozumiesz Javascript i obiektowego modelu dokumentu.

Popatrz na to:
https://developer.mo.../document.forms
https://developer.mo...M/form.elements
https://developer.mo...org/pl/DOM/form

Zakładasz, że masz formularze. Przypisujesz do wszystkich pól pierwszego formularza wartość 'Pierwsze'. Chyba nie tak chcesz zrobić.

document.forms[0] //tak odwołujesz się do pierwszego formularza document.forms[0][1] //albo: document.forms[0].elements[1] //do drugiego pola (bo liczymy od 0) document.forms[0].nazwapola //albo: document.forms[0]['nazwapola'] //albo: document.forms[0].elements['nazwapola'] //tak jest bezpieczniej document.forms[0].elements.nazwapola //tak też można var elementy = document.forms[0].elements; elementy[0].value = 'Wartość pierwszego pola'; elementy[1].value = 'Wartość drugiego';Zatem przepisz skrypt tak, aby robił to, co chcesz.
Użytkownik Ferrari edytował ten post 13 czerwiec 2010, 16:48
Juz mam kodzik ktory po koleji lapie i uzupelnia :)
Dzieki za wytlumaczenie i te linki :D

Jest tylko problem z wybieraniem z listy rozwijanej.

var elementy = document.forms[0].elements; elementy[0].value = 'cos'; elementy[1].value = 'cos'; elementy[2].value = 'cos';

Edit: Szczerze mowiac zaraz po napisaniu doszedlem do tego co teraz mam :) A ty mnie upewniles ze tak sie robi ;P
Użytkownik Kicha edytował ten post 13 czerwiec 2010, 16:51
Mam takie cos juz :) Czy ten kodzik jest dobry i bedzie wybieral? Mi cos nie dziala.

select.selectedIndex select.options[select.selectedIndex].value

Powinien działać. Pokaż cały kod, wtedy będę mógł znaleźć błąd.

select.value też powinien zwrócić aktualną wartość pola <select>

Ale jaki caly kod?
Strony czy skryptu?
ze skryptem robilem takie cos:
Wzorowalem sie na poprzednim.
elementy[0].select.selectedIndex elementy[0].select.options[select.selectedIndex].value = 'costam';

A w htmlu wyglada tak:
<div id="Selector" class="ssClosed"> <a href="#" id="Clicker" onclick="show(); return false;"> <span class="si">costam</span></a>

Nie, to tak nie wyjdzie. Jeżeli pole ma atrybut name: <select name="select">, wtedy:elementy['select'].valueJeżeli ma atrybut ID - <select id="select">, wtedy odnosimy się przez document.getElementById:document.getElementById('select').value
Użytkownik Ferrari edytował ten post 14 czerwiec 2010, 09:25
Ale jesli ja id pola tego nie znam? Znaczy sie znam id opcji wybieranej ale pola tego nie.
Czy ten getElementById to chodzi o id opcji czy pola?

Jeśli chcesz, możesz wyciągnąć wartość konkretnej opcji. Po prostu spróbuj sam, a nie pytaj co chwilę. Za pomocą document.getElementById() odnosisz się do dowolnego znacznika, który ma przypisany atrybut id. Bardzo pomocne jest rozszerzenie Firebug do Firefoksa. W karcie DOM można przyjrzeć się własnościom wszystkich obiektów (w karcie HTML znajdujesz odpowiedni znacznik, klikasz prawym klawiszem myszy i wybierasz "pokaż w karcie DOM").

Sie pogubilem w tym firebugu, pelno tego tam jest juz sam nie wiem czego szukac...

Czy ten kod powinien wybierac z listy? Napisalem cos takiego z pomoca pewnej rzeczy ale nie wiem czy dziala.

var index = PL; var firstone = document.getElementById('Selector').getElementsByTagName('jeden')[index]; firstone.firstChild.innerHTML

Akurat zamiast "jeden" powinieneś wstawić nazwę szukanego tagu, a metoda getElementsByTagName() zwraca tablicę, a nie obiekt, więc wartość index będzie numerem (musisz policzyć ile tych elementów jest; najlepiej użyj konsoli i wykonaj console.log(firstone), a wtedy znajdziesz swój numer indeksu).
No i skoro już będziesz miał żądaną pozycję, to wystarczy zasymulować na niej kliknięcie (wykonać zdarzenie kliknięcia), więc dalszy kod jest zbędny i właściwie nic on nie robi poza tym, że odwołuje się do treści w spanie.

Czyli tak, powinno byc:
getElementsByTagName("SPAN") bo szukam spanu który zostanie zaznaczony? chyba dobrze mysle
a w var index = liczba ktora odpowiada danej opcji w kolejnosci ktorejsc tam;?

A jak sie robi symulacje klikniecia? Czy przez event.initMouseEvent?

Poprzez wywołanie element.onclick().

Z tego co czytalem to onclick() dziala "na nacisniecie" toznaczy wywoluje cos dopiero jak użytkownik nacisnie pole.
Popatrze jeszcze i poszukam...

onclick jest zdarzeniem i mogą je wywołać zarówno użytkownik, jak i skrypt. Nie zadziała jednak przypadek, gdy zechcesz zasymulować kliknięcie na element, do którego nie ma przypisanego zdarzenia (mówię tu konkretnie o atrybucie href).<a href="javascript:alert('href')" onclick="alert('onclick')" id="x">test</a> <script>document.getElementById('x').onclick()</script>

Czyli co? w tym htmlu bedzie dzialac? wkoncu jest przypisane ze onclick="show()
Użytkownik Kicha edytował ten post 20 czerwiec 2010, 13:27
Sorry za glupi post co napisalem.
Nie mysle i wychodza takie glupoty.
Z powodu ze nie moge zdzialac z tamtym kodem wiec mam troszke inny sprawdzcie czy on uzupelnia.
function select(v) { var select = document.getElementById("selectid"); for(var i=0; i<select.options.length; i++) { if(select.options[i].value == v) { select.selectedIndex = i; break; } } }

To raczej Ty powinieneś sprawdzić, czy uzupełnia. On działa tylko dla elementów typu SELECT, więc jeśli używasz go na innego typu elemencie, to nie zadziała.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.