Witam. Uczę się powoli JavaScriptu i postanowiłem sobie zrobić walidację formularza, a każde sprawdzane pole jest sprawdzane po jego opuszczeniu (funkcja onblur) i jeśli jest źle to blokuje mi przycisk wyślij. Napisałem tak:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="pl-PL">
<head>
<title>Strona z newsem</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
<script type="text/javascript">
window.onload = Laduj;
var error = false;
function Laduj() {
document.forms['wyslij'].imie.onblur = SprawdzImie;
document.forms['wyslij'].nazwisko.onblur = SprawdzNazwisko;
}
function SprawdzImie() {
var imie = document.forms['wyslij'].imie.value;
var imie2 = document.getElementById('imie2');
if (imie == '') {
document.forms['wyslij'].imie.style.background = 'red';
imie2.innerHTML = 'Nie wpisałeś';
error = true;
}
else if(imie.length<5) {
document.forms['wyslij'].imie.style.background = 'red';
imie2.innerHTML = 'za krótkie';
error = true;
}
else {
document.forms['wyslij'].imie.style.background = 'green';
imie2.innerHTML = 'ok';
error = false;
}
if (error) {
document.getElementById('submit').setAttribute('disabled', 'disabled');
}
else {
document.getElementById('submit').removeAttribute('disabled', 'disabled');
}
}
function SprawdzNazwisko() {
var nazwisko = document.forms['wyslij'].nazwisko.value;
var nazwisko2 = document.getElementById('nazwisko2');
if (nazwisko == '') {
document.forms['wyslij'].nazwisko.style.background = 'red';
nazwisko2.innerHTML = 'Nie wpisałeś';
error = true;
}
else if(nazwisko.length<5) {
document.forms['wyslij'].nazwisko.style.background = 'red';
nazwisko2.innerHTML = 'za krótkie';
error = true;
}
else {
document.forms['wyslij'].nazwisko.style.background = 'green';
nazwisko2.innerHTML = 'ok';
error = false;
}
if (error) {
document.getElementById('submit').setAttribute('disabled', 'disabled');
}
else {
document.getElementById('submit').removeAttribute('disabled', 'disabled');
}
}
</script>
</head>
<body>
<form name="wyslij" action="" method="post">
<table>
<tr>
<td>Imię:</td><td><input type="text" name="imie" /></td>
</tr>
<tr>
<td></td><td id="imie2"></td>
</tr>
<tr>
<td>Nazwisko:</td><td><input type="text" name="nazwisko" /></td>
</tr>
<tr>
<td></td><td id="nazwisko2"></td>
</tr>
<tr>
<td>Adres e-mail:</td><td><input type="text" name="email" /></td>
</tr>
<tr>
<td></td><td id="email2"></td>
</tr>
<tr>
<td>Strona www:</td><td><input type="text" name="strona" /></td>
<div id="strona2"></div>
</tr>
<tr>
<td>Temat:</td><td><input type="text" name="temat" /></td>
<div id="temat2"></div>
</tr>
<tr>
<td>Treść:</td><td><textarea name="tresc" rows="5"></textarea></td>
<div id="tresc2"></div>
</tr>
<tr>
<td><input type="submit" value="Wyślij" id="submit" /></td>
</tr>
</table>
</form>
</body>
</html>
Proszę nie patrzeć na kryteria walidacji bo są one prowizoryczne (puste imię, imię krótsze niż 5 znaków i nazwisko tak samo).
Chodzi o to, że jak wpiszę 2 błędne pola to jest ok, blokuje mi przycisk. Jeśli jednak jedno pole uzupełnię dobrze a drugie dalej nie to i tak mogę wysłać formularz, wystarczy że ominę pole niepoprawnie wypełnione. Chcę zrobić tak, żeby jeśli jest przynajmniej 1 źle wypełnione pole to żeby blokowało mi przycisk. Nie wiem jak to osiągnąć. Próbowałem dodać jeszcze 1 zmienną globalną i inkrementować ją jeśli wystąpi błąd, a później warunek, że jeśli ta zmienna jest różna od 0 to żeby blokowało, ale po pierwsze nie za dobrze to działa, po drugie jest to niedobre rozwiązanie. Kombinowałem na parę sposobów ale wynik zostaje taki sam.
Nie proszę o gotowca, raczej nakierowanie (logiczne bądź językowe), bo w końcu mam się nauczyć tego języka a nie żerować na innych. Za wszelkie wskazówki będę niezmiernie wdzięczny. Pozdrawiam.