Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [js] walidacja radio
agataperz
post
Post #1





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 24.03.2009
Skąd: Hamburg DE

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


Witam,

mam taki skrypt
  1. function checkradio(){
  2. var radio=false;
  3. for (var i=0; i<document.formularz.length; i++){
  4. if (document.formularz.elements[i].type == "radio"){
  5. var x = document.formularz.elements[document.formularz.elements[i].name].length;
  6. for (var y=0; y<x; y++){
  7. if (document.formularz.elements[i+y].checked) break;
  8. }
  9. if (y == x){
  10. return false;
  11. } else radio=true;
  12. i = i+x-1;
  13. } else radio=true;
  14. }
  15. return radio;
  16. }


oraz

  1. <form name="formularz" action="finalizacja.php" method="post" onsubmit="return sprawdz(this);return checkradio(this)">


funkcja sprawdz działa poprawie - sprawdza pola input text
niestety funkcja checkradio nie chce działać. możecie mi powiedzieć co jest źle?
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


W poprzednim Twoim temacie napisałem jak sprawdzać pola radio...

ps. jeżeli nie wiesz dlaczego "coś" w JS nie działa - zobacz moją sygnaturę
Go to the top of the page
+Quote Post
agataperz
post
Post #3





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 24.03.2009
Skąd: Hamburg DE

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


Witaj CuteOne,

niestety ten skrypt:
  1. var obj = document.formularz.platnosc;
  2. var len = obj.length;
  3.  
  4. for(var i=0; i<len; i++) {
  5.  
  6. if(obj[i].checked) {
  7.  
  8. alert(i);
  9. }
  10. }

nie działa.

w konsoli błędów nie ma żadnego błędu.

Go to the top of the page
+Quote Post
flashdev
post
Post #4





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


wpisz do konsoli JS poniższą linijkę:
Kod
document.write('<button onclick="alert(\'hej\');alert(\'hej :)\')">hej</button>')


następnie przetestuj skrypt:
Kod
document.write('<button onclick="return alert(\'hej\');alert(\'hej :)\')">hej</button>')


Odrazu zroszumiesz swój błąd.

A poza tym nie wstrzykuj kodu JavaScript bezpośrednio do ciała strony. Do tego służą pliki js, które opisują zachowanie strony.
Go to the top of the page
+Quote Post
Magic WWW
post
Post #5





Grupa: Zarejestrowani
Postów: 123
Pomógł: 32
Dołączył: 9.09.2010
Skąd: Brzeg

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


Nie zagłębiam się bardziej w temat, tylko mam propozycję dla autora żeby zaczął korzystać z biblioteki jQuery (IMG:style_emoticons/default/smile.gif) Jest to wiele wygodniejsze jak czyste Javascript.
Go to the top of the page
+Quote Post
kamil4u
post
Post #6





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

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


@Magic WWW: Kłóciłbym się - szczególnie przy takiej drobnostce jak walidacja formularza.
@agataperz: Robisz dość podstawowy błąd.
Kod
onsubmit="return sprawdz(this);return checkradio(this)"

Funkcja checkradio się nie wykona, dlatego że zostanie zwrócona wartość funkcji sprawdź i ta część kody zostanie zakończona.
Przykład:
Kod
<span onclick="return true; alert(123);">KLIK</span>


Rozwiązaniem problemu jest stworzenie nowej funkcji "sprawdź wszystko" lub zapisanie tego w takiej formie:
Kod
return (sprawdz(this) && checkradio(this))


Lecimy dalej...
Jak w funkcji jako parametr przekazujesz "this": checkradio(this) to w funkcji nie musisz już korzystać z
document.formularz.length, a z przekazanej referencji:
[JAVASCRIPT] pobierz, plaintext
  1. function checkradio( formularz ){
  2. //pod zmienną formularz masz to samo co wcześniej w document.formularz
  3. // jest to lepsze rozwiązanie, gdyż skrypt nie musi ponownie szukać tego elementu
[JAVASCRIPT] pobierz, plaintext


W ogóle ta Twoja funkcja mi się nie podoba... Poczytaj o getElementsByTagName, a następnie napisz taki kod(ja przedstawiłem, go w pseudokodzie):
Kod
function sprawdz( formularz ){ //sprawdza czy któryś z inputów został zaznaczony - prawda jeżeli został, fałsz jeżeli nie został
zmienna INPUT = formularz.pobierz_wszystkie_inputy;
PĘTLA po INPUT{
   JEŻELI( INPUT.type == radio i INPUT.checked ) ZWRÓĆ prawdę
}
ZWRÓĆ fałsz
}


Powodzenia
Go to the top of the page
+Quote Post
CuteOne
post
Post #7





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


W ramach testów stwórz sobie nowy plik index.html a w nim:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. <title>Untitled Document</title>
  5. </head>
  6.  
  7.  
  8. <form name="formularz" id="formularz" action="ddd.thml" onsubmit="validate(); return false;">
  9. <input type="radio" name="platnosc" value="1"/>
  10. <input type="radio" name="platnosc" value="2"/>
  11. <input type="radio" name="platnosc" value="3"/>
  12.  
  13. <input type="submit" name="submit"/>
  14. </form>
  15.  
  16. <script type="text/javascript">
  17.  
  18. function checkRadio(inputName) {
  19.  
  20. var obj = document.formularz[inputName];
  21. var len = obj.length;
  22.  
  23. for(var i=0; i<len; i++) {
  24.  
  25. if(obj[i].checked) return true;
  26.  
  27. }
  28. alert('Radio nie został wciśnięty');
  29. return false;
  30. }
  31.  
  32.  
  33. function validate(form) {
  34.  
  35. var noerror = true;
  36.  
  37. if(!checkRadio('platnosc')) { noerror = false; }
  38. // itd. np. sprawdzanie inputów if(checkInput()) { noerror = false; }
  39.  
  40. if(noerror) {
  41.  
  42. document.formularz.submit();
  43. }
  44. }
  45. </script>
  46.  
  47. </body>
  48. </html>


Ten post edytował CuteOne 28.08.2011, 14:23:04
Go to the top of the page
+Quote Post
agataperz
post
Post #8





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 24.03.2009
Skąd: Hamburg DE

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


CuteOne masz rację Twój skrypt działa. Nie wiem czemu mi nie chciał działać. Widocznie mam za dużo zmiennych do sprawdzenia w jednym pliku i się już pogubiłam.

jeżeli chodzi o funkcje checkInput to niestety chyba żle cos robie bo przepuszcza mnie przez submit

  1. function checkRadio(inputName) {
  2. var obj = document.formularz[inputName];
  3. var len = obj.length;
  4. for(var i=0; i<len; i++) {
  5. if(obj[i].checked) return true;
  6. }
  7. alert('Nie zaznaczyłe? formy płatno?ci. Wybierz kuriera a następnie formę platno?ci: przelew, przelew on-line, płatno?ć przy odbiorze.');
  8. return false;
  9. }
  10. function checkInput(inputName) {
  11. var obj = document.formularz[inputName];
  12. var len = obj.length;
  13. for(var i=0; i<len; i++) {
  14. if(obj[i].checked) return true;
  15. }
  16. alert('Niestety nie wiemy komu mamy wysłać zamówienie. Nie podałe? swoich danych.');
  17. return false;
  18. }
  19.  
  20. function validate(form) {
  21. var noerror = true;
  22. if(!checkRadio('platnosc') || checkInput('zam_imie')) { noerror = false; }
  23. if(noerror) {
  24. document.formularz.submit();
  25. }
  26. }


Ten post edytował agataperz 28.08.2011, 18:14:27
Go to the top of the page
+Quote Post
flashdev
post
Post #9





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


@agataperz mam do Ciebie niedyskretne pytanie.
Uznałaś mnie za idiotę skoro zupełnie zignorowałaś moją prawidłową odpowiedź (podpowiedź) na Twoje pytanie.

Wracam na to forum po długim czasie i niestety widzę, że długo tu nie zabawię. Poziom wiedzy tutaj jest żenująco niski.
Sorry za offtopic. Musiałem to z siebie wylać.
Go to the top of the page
+Quote Post
agataperz
post
Post #10





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 24.03.2009
Skąd: Hamburg DE

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


@flashdev tak wiem że błąd był w tym moim skrypcie. I dzieki Tobie za zwrocenie uwagi.
Poza tym chciałabym Ci tylko nasunąć pewną myśl - dział przedszkole mówi samo za siebie. Ja niestety nie mam zielonego pojecia o js a jeszcze bardziej o jquery a nie mowiac o ajaxie. Dzieki @kamil4u wziełam się za studiowanie tych języków niestety nie jestem w stanie w ciągu jednego dnia przeczytać wszystkiego.
Wiem również że czasami wypisuje glupoty jezeli chodzi o skrypty js ale ...
Jedyne co znam to html, php, sql. Mam nadzieje że sie nie zrazisz @flashdev do tego forum przeze mnie.
Go to the top of the page
+Quote Post
CuteOne
post
Post #11





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


własność .checked pole typu "text" nie posiada (IMG:style_emoticons/default/smile.gif)

  1. function checkInput(inputName) {
  2. var obj = document.formularz[inputName];
  3. var len = obj.length;
  4.  
  5. if(len > 5 && len < 50) { //sprawdzamy długość wpisanych danych przedział to 5-50 ale sama możesz to ustalić
  6.  
  7. return true;
  8. }
  9. alert('Niestety nie wiemy komu mamy wysłać zamówienie. Nie podałe? swoich danych.');
  10. return false;
  11. }


Tak ps. nie prościej było to komuś zlecić? Zaoszczędzisz sporo czasu i jak mniemam pieniędzy, w końcu czas to pieniądz (IMG:style_emoticons/default/smile.gif)

EDIT: flashdev: chyba za bardzo bierzesz to do siebie. I nie wiem czego oczekujesz po dziale Przedszkole o.O Tymbardziej nie wiem co oznacza "coś wartościowego wśród tych wszystkich śmieci"...

Ten post edytował CuteOne 28.08.2011, 19:00:09
Go to the top of the page
+Quote Post
flashdev
post
Post #12





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Może masz rację, może za dużo wymagam.
Zraziło mnie tylko to, że próbuję dać Ci wędkę, a Ty idziesz na łatwiznę i bierzesz od nich rybkę. Oni dobrze wiedzą, że ja już rozwiązałem Twój problem, ale mimo wszystko karmisz ich dając im tutejszego plusa (pomógł). I tak to się tutaj kręci. Czasem tu będę zaglądał ale po prostu przez taki układ jaki aktualnie tu panuje ciężko znaleźć coś wartościowego wśród tych wszystkich śmieci.
Z mojej strony koniec tematu. Powiedzialem wszystko co miałem do powiedzenia.
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: 13.10.2025 - 05:23