Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] walidacja radio
Forum PHP.pl > Forum > Przedszkole
agataperz
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?
CuteOne
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ę
agataperz
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.

flashdev
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.
Magic WWW
Nie zagłębiam się bardziej w temat, tylko mam propozycję dla autora żeby zaczął korzystać z biblioteki jQuery smile.gif Jest to wiele wygodniejsze jak czyste Javascript.
kamil4u
@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
CuteOne
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>
agataperz
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. }
flashdev
@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ć.
agataperz
@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.
CuteOne
własność .checked pole typu "text" nie posiada 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 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"...
flashdev
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.