Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript]Obsługa formularzy
patryczakowy
post
Post #1





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


Witam interesują mnie dwa efekty uzyskane w tej ankiecie http://www.moje-ankiety.pl/wypelnij/kwestionariusz/4967 zaznaczam że temat jest zupełnie przypadkowy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Chodzi mi w jaki sposób uzyskać taki efekt jak jest tam po kliknięciu wyczyść odpowiedź.
A drugi są pytania otwarte pola textarea po kliknięci którego zaznacza się od razu odpowiedź w tym momencie jest to checkbox ale interesują mnie również kontrolki typu radio.
Za wszelkie rady i sugestię będę bardzo wdzięczny.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
Maxik
post
Post #2





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


1. <input type="reset" value="Wyczyść formularz" />
2. Do textarea dodajesz zdarzenie onFocus które zaznacza checkboxa lub radio.
Go to the top of the page
+Quote Post
kamil4u
post
Post #3





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Cytat
Chodzi mi w jaki sposób uzyskać taki efekt jak jest tam po kliknięciu wyczyść odpowiedź.

Kod
onClick="return confirm('Tu pytanie?'); funkcja_czyszcząca_ pola();"


Cytat
A drugi są pytania otwarte pola textarea po kliknięci którego zaznacza się od razu odpowiedź w tym momencie jest to checkbox ale interesują mnie również kontrolki typu radio.

Kod
<input type="checkbox" id="test"><textarea onfocus="document.getElementById('test').checked = true;">
Go to the top of the page
+Quote Post
patryczakowy
post
Post #4





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


Cytat(Maxik @ 11.06.2009, 18:51:47 ) *
1. <input type="reset" value="Wyczyść formularz" />

Właśnie nie chcę inputa tylko taki link jak jest tu w ankiecie i żeby czyścił nie cały formularz tylko jedną odpowiedź
drugie zaraz przetestuje i zobaczę czy o to mi chodziło
WIELKIE DZIĘKI ZA RADĘ

z zaznaczeniem chcboxa działa Jeszcze raz dzięki .
Jeszcze jak by mi ktoś lekko podpowiedział jak powinna wyglądać funkcja czyszcząca tylko jedno pytanie
Go to the top of the page
+Quote Post
kamil4u
post
Post #5





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Cytat
Jeszcze jak by mi ktoś lekko podpowiedział jak powinna wyglądać funkcja czyszcząca tylko jedno pytanie

Dla checkbox-a, radio:
Kod
referencja_do_elementu.checked = false;

Dla textarea,input type="text":
Kod
referencja_do_elementu.value = '';


referencja_do_elementu:
- document.getElementById
- document.getElementsByName
- document.getElementsByTagName
- inne - rzadko używane to nie podaje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
patryczakowy
post
Post #6





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


Coś mi nie wychodzi napisałem taką funkcję
  1. <script type="text/javascript">
  2. function erase(id)
  3. {
  4. document.getElementsByName(id).checked = false;
  5. document.getElementsByName(id).value = '';
  6. }
  7.  
  8. </script>

a tak wywołuje czyszczenie
  1. <a class="erease" href="#" onClick="return confirm('Czy napewno chcesz wyczyszczyć tą odpowiedź?'); erase(2);">(wyczyść odpowiedź...)</a>

a wszystkie checkboxy kontrolki radio lub pola textarea mają name ustawione na 2
Go to the top of the page
+Quote Post
Maxik
post
Post #7





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


To tak nie działa. Musisz to co zwróci Ci getElementsByName przetworzyć w pętli.
Go to the top of the page
+Quote Post
kamil4u
post
Post #8





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Cytat
Musisz to co zwróci Ci getElementsByName przetworzyć w pętli.

Po co (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) - no chyba, że chcesz usunąć wszystko co ma 'name' = 2, ale z tego co zrozumiałem wyżej jest inaczej:
Kod
<script type="text/javascript">
function eraseCheck(name)
{
document.getElementsByName(name)[0].checked = false;
}
function eraseValue(name)
{
document.getElementsByName(name)[0].value = '';
}
</script>


Ten post edytował kamil4u 11.06.2009, 20:21:17
Go to the top of the page
+Quote Post
patryczakowy
post
Post #9





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


kurcze czegoś w tym javascript nie rozumię przykładowo wygląda odpowiedź tak:
  1. <a class="erease" href="#" onClick="return confirm('Czy napewno chcesz wyczyszczyć tą odpowiedź?'); erase(13);">(wyczyść odpowiedź...)</a>
  2. <ul><li><input type="checkbox" value="14" name="13[]" id="zaznacz1"/> zaznacz1</li>
  3. <li><input type="checkbox" value="15" name="13[]" id="zaznacz2"/>zaznacz2</li>
  4. <li>
  5. <input type="checkbox" value="16" name="13[]" id="zaznacz3"/> zaznacz3<br/>
  6. <textarea name="13[]" cols="50" rows="1" onfocus="document.getElementById('zaznacz3').checked = true;"></textarea>
  7. </li></ul>

i po kliknięciu chcę wyczyszczyć wszystkie odpowiedzi z name="13[]" więc tak jak tu kolega poradził jeśli wszystkie to trzeba w pętli przejechać
  1. function erase(name)
  2. {
  3. tablica=document.getElementsByName(name);
  4. for (n in tablica)
  5. {
  6. tablica[n].checked = false;
  7. }
  8.  
  9. }

no i nie działa nie działa mi też sposób ten document.getElementsByName(name)[0].checked = false; co rozumiem że powinien w tym wypadku wyczyszczyć pierwszy element z tablicy?
Go to the top of the page
+Quote Post
kamil4u
post
Post #10





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Nie działa bo name masz 13[], a nie 13 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
patryczakowy
post
Post #11





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


jak zmienię na 13 to też nie działa a po za tym potrzebuje to w skrypcie php odebrać jako tablicę więc musi być 13[]
Go to the top of the page
+Quote Post
kamil4u
post
Post #12





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Kod
<script>
function erase(n,t,a,i){
if(!confirm('Czy napewno chcesz wyczyszczyć tą odpowiedź?'))
  return false;

t=document.getElementsByName(n);
for(i=0; a=t[i++];){
  if(a.type == 'radio' || a.type == 'checkbox')
    a.checked = false;
  else
    a.value = '';
}
return true;
}
</script>

<a class="erease1" href="#" onClick="return erase('13[]');">(wyczyść odpowiedź...)</a>

<ul><li><input type="checkbox" value="14" name="13[]" id="zaznacz1"/> zaznacz1</li>
<li><input type="checkbox" value="15" name="13[]" id="zaznacz2"/>zaznacz2</li>
<li>
<input type="checkbox" value="16" name="13[]" id="zaznacz3"/> zaznacz3<br/>
<textarea name="13[]" cols="50" rows="1" onfocus="document.getElementById('zaznacz3').checked = true;"></textarea>
</li></ul>
Go to the top of the page
+Quote Post
patryczakowy
post
Post #13





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


Wielkie dzięki teraz elegancko działa nawet rozszerzyłem to o pola typu select jedno jest pewne bez waszej pomocy jeszcze troszkę bym czasu przy tym spędził no cóż pora sobie zakupić jakąś nową lekturę z javascriptu.

no i znowu się zaciąłem przy tych tablicach, a więc teraz mam problem z walidacją formularza:
  1. <form action="?akcja=#" method="post" name="form" onsubmit="return validate(this);">
  2. <!--Przykładowe textarea --!>
  3. <textarea rows="4" cols="60" name="4[]"/>

no i skrypt którym chcę zrobić walidację:
  1. function trunc_space(str) { if (str.length>0) while (1) if (str.charAt(0)==" ") str=str.substring(1,str.length) else break
  2. return str } function validate(form){ var p=0;if (trunc_space(form.4[0].value).length < 15)) alert("Odpowiedź na pytanie nr 3 jest nieprawidłowa, zbyt krótka, min. to 15 znaków.");p=1} else if (trunc_space(form.4[0].value)=="") alert("Nie została udzielona odpowiedź na pytanie nr 3 ");p=1} else if (trunc_space(form.3[0].value).length < 15)) alert("Odpowiedź na pytanie nr 4 jest nieprawidłowa, zbyt krótka, min. to 15 znaków.");p=1} else if (trunc_space(form.3[0].value)=="") alert("Nie została udzielona odpowiedź na pytanie nr 4 ");p=1} else {p=0}; if (p==0) return true; else return false;}

Nie działa mi żaden zapis:
form.4[0].value
form.4[].value
form.4.value

Z góry dzięki za rady
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie nazywaj elementów od cyfr!

Kod
form.[4][0].value

?
Go to the top of the page
+Quote Post
patryczakowy
post
Post #15





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


Cytat(erix @ 13.06.2009, 12:38:03 ) *
Nie nazywaj elementów od cyfr!

Kod
form.[4][0].value

?

No niestety też nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
A jeśli chodzi o nazywanie elementów to normalnie tego nie robię ale teraz robię coś na wzór www.moje-ankiety.pl, takie formularze generowane z bazy danych i stąd takie nazwy jest to po prostu id pytania
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ajjj, mój błąd:
Kod
form.elements[4][0].value

Ale wątpię, aby to zadziałało. Swoją drogą, przez tyle czasu mogłeś sam pokombinować.

Zmień identyfikatory na prawidłowe, zgodne ze specyfikacją: http://www.w3.org/TR/html401/types.html#type-name
Go to the top of the page
+Quote Post
patryczakowy
post
Post #17





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


Cały czas kombinuję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) w ostateczności zrezygnowałem przy textarea z tablicy po za tym brakowało parę klamer i ostateczna forma wyszła mi taka
Kod
document.form.open_4.value

Dzięki za rady
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 19:02