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

Walidacja formularza

Object Storage Arubacloud
0 głosów
336 wizyt
pytanie zadane 19 lutego 2017 w JavaScript przez Bakr Mądrala (6,850 p.)
Witam,

 

W jaki sposób zatrzymać przesyłanie danych z formularza, kiedy nie są spełnione warunki walidacji?

 

Próbowałem return false; , ale nie daje to rezultatu.

4 odpowiedzi

0 głosów
odpowiedź 19 lutego 2017 przez Tomek Sochacki Ekspert (227,510 p.)
if (e.preventDefault()) { e.preventDefault(); }
else if (window.event) {window.event.returnValue = false;} //For IE 8

return false; //dla środowiska nie obsługującego ww. rozwiązań, ale pamiętaj,
              // że return false musi być na samym końcu funkcji obsługującej onsubmit

 

komentarz 19 lutego 2017 przez Bakr Mądrala (6,850 p.)
function validateForm() {
    var checkFirstName = document.querySelector("#first-name")
    var checkLastName = document.querySelector("#last-name")
    var checkEmail = document.querySelector("#e-mail")
    var checkMessage = document.querySelector("#message")
    var checkPolicy = document.querySelector("#policy")

    if (checkFirstName.value == "") {
        checkFirstName.classList.add("error");
        document.querySelector("#first-name-label-error").innerHTML = "(Wymagane!)";
        return false;
    } else if (checkFirstName.value !== "") {
        checkFirstName.classList = ""
        document.querySelector("#first-name-label-error").innerHTML = ""
    }


    if (checkLastName.value == "") {
        checkLastName.classList.add("error")
        document.querySelector("#last-name-label-error").innerHTML = "(Wymagane!)"
        return false;
    } else if (checkLastName.value !== "") {
        checkLastName.classList = ""
        document.querySelector("#last-name-label-error").innerHTML = ""
    }


    if (checkEmail.value == "") {
        checkEmail.classList.add("error")
        document.querySelector("#email-name-label-error").innerHTML = "(Wymagane!)"
        return false;
    } else if (checkEmail.value !== "") {
        checkEmail.classList = ""
        document.querySelector("#email-name-label-error").innerHTML = ""
    }

    if (checkMessage.value == "") {
        checkMessage.classList.add("error")
        document.querySelector("#message-name-label-error").innerHTML = "(Wymagane!)"
        return false;
    } else if (checkMessage.value !== "") {
        checkMessage.classList = ""
        document.querySelector("#message-name-label-error").innerHTML = ""
    }

    if (checkPolicy.checked == false) {
        document.querySelector("#policy-name-label-error").innerHTML = "(Wymagane!)"
        checkPolicy.classList.add("error")

        return false;
    } else if (checkPolicy.checked == true) {
        document.querySelector("#policy-name-label-error").innerHTML = ""
    }


}

document.addEventListener("submit", function() {
    validateForm();
})

 

 

Jak tutaj to zastosować?

0 głosów
odpowiedź 19 lutego 2017 przez radek024 Szeryf (77,160 p.)

Dodajesz atrybut required do pola formularza? Rozwiązanie jest bardzo dobrze wspierane i często zastępuje JSa w dużym stopniu.

komentarz 19 lutego 2017 przez Bakr Mądrala (6,850 p.)
Niestety w tym wypadku muszę zastosować JS (wersja na zajęcia ;) )
0 głosów
odpowiedź 19 lutego 2017 przez misiek.sz Bywalec (2,050 p.)
edycja 19 lutego 2017 przez misiek.sz

Zacznijmy od tego żebyś do każdego wymaganego inputu dodał atrybuta data-error i pobrał to tak:

var form = document.querySelector("#myForm"),
    fields = form.querySelectorAll("[data-error]");

później stwórz sobie funkcje odpowiedzialne za walidację np.

function isNotEmpty(field){
    return field.value!=="";
}

później stwórz funkcję, która wyświetli komunikaty o błędach np. tak:

function showErrors(errors){

    var ul = document.querySelector("ul.errors");
    if(!ul){
        ul = document.createElement("ul");
        ul.classList.add("errors");

    }

    ul.innerHTML = "";

    errors.forEach(function(error){
        var li = document.createElement("li");
        li.textContent = error;
        ul.appendChild(li);
    });
    form.parentNode.insertBefore(ul, form);
}

następnie przypisujesz zdarzenie submit i robisz coś takiego:

form.addEventListener("submit", function(e){

    e.preventDefault();

      var  errors = [];

    for(var i=0; i<fields.length; i++){
        var field = fields[i],
              isValid = true;

        if(field.type === "text"){
            isValid = isNotEmpty(field);
        }

        if(field.type=="select-one"){
         isValid = isNotEmpty(field);
        }

tu możesz dać więcej typów do spraawdzenia i całość kończysz tak:

  if(!isValid){
            field.classList.add("error");
            errors.push(field.dataset.error);
        } else{
            field.classList.remove("error");
        }
    }
      if(errors.length){
          showErrors(errors);

        } else{
            form.submit();
        }
}, false);

 

na koniec łączysz wszystko w całość i mi stawiasz piwo :)

 

a i bym zapomniał, inputy w formularzu mają wyglądać tak:

<input type="text"  data-error="Podaj imię i nazwisko">

 

0 głosów
odpowiedź 19 lutego 2017 przez seba Dyskutant (8,900 p.)
<!DOCTYPE html>
<html>
<head>
	<title>Walidacja Formularzy - Jquery</title>
	<meta charset="utf-8">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
	<script type="text/javascript" src="http://cdn.jsdelivr.net/jquery.validation/1.15.0/jquery.validate.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
			$("#formularz").validate();
		})
		

		
	</script>
</head>
<body>

	<form id="formularz" enctype="text/plain" action="mailto:nauka@gmail.com" method="post">
		<b><font size="4">Dane osobowe:</font><br><br>
		Nazwisko:
		<input id="nazw" name="nazw" value="" size="40" class="required" minlength="3"><br><br>
		Imie:
		<input id="imie" name="imie" value="" size="40" class="required" minlength="3"><br><br><!--requied połączony jest z validation jquery-->
		Zawód:
		<input id="zawod" name="zawod" value="" size="40" class="required" minlength="3"><br><br>
		Email:
		<input id="email" name="email" value="" size="40" class="required email"><br><br>
		<input type="submit" value="wyślij">

	</form>

</body>
</html>

 

Podobne pytania

+1 głos
2 odpowiedzi 320 wizyt
pytanie zadane 24 czerwca 2022 w JavaScript przez AgentTecza Obywatel (1,810 p.)
+1 głos
2 odpowiedzi 1,154 wizyt
pytanie zadane 3 listopada 2020 w JavaScript przez ptomeccc Użytkownik (800 p.)
0 głosów
2 odpowiedzi 440 wizyt
pytanie zadane 5 sierpnia 2020 w JavaScript przez b1aster Nowicjusz (120 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...