• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Walidacja JS nie działa. DZIWNY PROBLEM.

Mały hosting, OGROMNE możliwości
0 głosów
643 wizyt
pytanie zadane 8 grudnia 2015 w JavaScript przez artimal Gaduła (4,800 p.)
edycja 8 grudnia 2015 przez artimal

Witam, posiadam taki kod w formularzu:

<form action="zarejestruj.php" method="post" onsubmit="validateForm2()">

Oraz taki w js:

	function validateForm2() {
        if ($('#rej_login').val().length < 3 || $('#rej_login').val().length > 20 || $('#rej_haslo').val().length < 8 || $('#rej_haslo').val().length > 30 || $('#rej_haslo').val() != $('#rej_haslodwa').val() || $('#rej_email').val().length < 1 || !re.test($('#rej_email').val()) || $('#rej_email').val().length > 50) {
            return false;
        }
        else {
            return true;
        }
    }

Walidacja zachowuje się tak jak by jej nie było. Po kliknięciu submit mimo niespełnienia warunków pliki sa wysyłane do zarejestruj.php. Nie mam pojęcia dlaczego to nie działa i proszę o pomoc.
Pozdrawiam.

2 odpowiedzi

+2 głosów
odpowiedź 8 grudnia 2015 przez Comandeer Guru (607,960 p.)
wybrane 8 grudnia 2015 przez artimal
 
Najlepsza
komentarz 8 grudnia 2015 przez artimal Gaduła (4,800 p.)
	function validateForm2() {
        if (!($('#rej_login').val().length < 3 || $('#rej_login').val().length > 20 || $('#rej_haslo').val().length < 8 || $('#rej_haslo').val().length > 30 || $('#rej_haslo').val() != $('#rej_haslodwa').val() || $('#rej_email').val().length < 1 || !re.test($('#rej_email').val()) || $('#rej_email').val().length > 50))
        {
        	document.getElementById("rejestracja").action = zarejestruj.php;
            document.getElementById("rejestracja").submit();
        }
        else
        {
        	event.preventDefault();
        }
    }

Niestety strona nadal blokuje przesłanie do zarejestruj.php ale też nadal odświeża stronę. Czym różniło by się zamienienie odpalenia funkcji w html w onsubmit od dodania event listenera on click na przysick submit.

komentarz 8 grudnia 2015 przez Comandeer Guru (607,960 p.)
No bo event się z powietrza nie weźmie. Poczytaj o addEventListener, bo jest to o wiele lepszy sposób niż zabawy z przestarzałymi atrybutami na HTML.
komentarz 8 grudnia 2015 przez artimal Gaduła (4,800 p.)

Dzięki za pomoc, rozwiązałem to w taki sposób i działa:
 

	var ok2 = document.getElementById("ok2");
	ok2.addEventListener("click", function validateForm2() {
        if (!($('#rej_login').val().length < 3 || $('#rej_login').val().length > 20 || $('#rej_haslo').val().length < 8 || $('#rej_haslo').val().length > 30 || $('#rej_haslo').val() != $('#rej_haslodwa').val() || $('#rej_email').val().length < 1 || !re.test($('#rej_email').val()) || $('#rej_email').val().length > 50))
        {
        	document.getElementById("rejestracja").setAttribute("action","zarejestruj.php");
            document.getElementById("rejestracja").submit();
        }
        else
        {
        	event.preventDefault();
        }
    }
	, false);

Gdzie przycisk submit ma id="ok2" a  z htmla zostały usunięte atrybuty onsubmit i action :)

komentarz 8 grudnia 2015 przez Comandeer Guru (607,960 p.)
Poprawniej byłoby się podpiąć pod zdarzenie submit samego formularza.
komentarz 8 grudnia 2015 przez artimal Gaduła (4,800 p.)
Niestety podpinanie się do submit formularza zawsze  skutkowało oświeżeniem strony. Gdy wszystkim zajmuje się javascript to działą tak jak podałem.
komentarz 8 grudnia 2015 przez Comandeer Guru (607,960 p.)

No bo dalej niepoprawnie próbujesz się dostać do event

document.getElementById('rejestracja')..addEventListener("submit", function validateForm2(event) {
        if (!($('#rej_login').val().length < 3 || $('#rej_login').val().length > 20 || $('#rej_haslo').val().length < 8 || $('#rej_haslo').val().length > 30 || $('#rej_haslo').val() != $('#rej_haslodwa').val() || $('#rej_email').val().length < 1 || !re.test($('#rej_email').val()) || $('#rej_email').val().length > 50))
        {
        	document.getElementById("rejestracja").setAttribute("action","zarejestruj.php");
        }
        else
        {
        	event.preventDefault();
        }
    }
	, false);

 

0 głosów
odpowiedź 8 grudnia 2015 przez artimal Gaduła (4,800 p.)

Zmieniłem teraz kod na coś takiego:

<form id="rejestracja" action="" method="post" onsubmit="validateForm2()" autocomplete="off">

oraz:
 

	function validateForm2() {
        if (!($('#rej_login').val().length < 3 || $('#rej_login').val().length > 20 || $('#rej_haslo').val().length < 8 || $('#rej_haslo').val().length > 30 || $('#rej_haslo').val() != $('#rej_haslodwa').val() || $('#rej_email').val().length < 1 || !re.test($('#rej_email').val()) || $('#rej_email').val().length > 50))
        {
        	document.getElementById("rejestracja").action = zarejestruj.php;
            document.getElementById("rejestracja").submit();
        }
    }

Teraz teoretycznie działa, lecz jest jedna rzecz która mnie denerwuje. Strona się odświeża gdy warunki walidacji nie są spełnione. Chciałbym aby się nie odświeżała. Czy da się to jakoś zrobić?

Podobne pytania

0 głosów
1 odpowiedź 467 wizyt
pytanie zadane 17 kwietnia 2018 w JavaScript przez Catalonya1992 Mądrala (5,440 p.)
0 głosów
2 odpowiedzi 2,351 wizyt
pytanie zadane 11 października 2018 w JavaScript przez Sobol3k Użytkownik (690 p.)
0 głosów
0 odpowiedzi 452 wizyt
pytanie zadane 8 maja 2018 w JavaScript przez XDdomino Użytkownik (680 p.)

93,718 zapytań

142,631 odpowiedzi

323,263 komentarzy

63,266 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...