Mam taki kodzik do prostego walidowania formularza. Niestety, takie rozwiązanie ma jeden zasadniczy błąd - przy każdej zmianie, nawet na lepsze do kontrolki dolicza się liczba. Gdy zmienimy to na złą wartość liczba się odejmie ale o jeden a wcześniej mogła ona być dodana np. 3 razy. Jak to poprawić? Albo jaki jest inny sposób podsumowania walidacji, nie dopuszczając do wysłania formularza?
var kontrolka = 0; $("#nazwa").blur(function() { $("#wait1").attr("src", "../images/load.gif"); var nazwa = $('#nazwa').val() $.post("moduly/produkty/sprawdz.php", { nazwa: nazwa }, function(result){ if(result = 'ok' && nazwa.length > 5 ){ $('#wait1').attr("src", "../images/ok.png"); kontrolka += 1; } else { $('#wait1').attr("src", "../images/no.png"); kontrolka -= 1; } blokada(); }); }) $("#cena").blur(function() { var cena = $('#cena').val(); cena = cena.replace(',', '.'); $("#cena").val(cena); $('#wait2').attr("src", "../images/ok.png"); kontrolka += 1; }); var czytnik = 0; $("#ilosc_sz").blur(function() { var ilosc_sz = $('#ilosc_sz').val(); if(ilosc_sz.length != 0){ czytnik += 1; kontrolka += 1; } else { czytnik -= 1; kontrolka -= 1; } zmien(); }); $("#maks_il").blur(function() { var maks_il = $('#maks_il').val(); if(maks_il.length != 0){ czytnik += 1; kontrolka += 1; } else { czytnik -= 1; kontrolka -= 1; } zmien(); }); function zmien () { if(czytnik == 2) $('#wait3').attr("src", "../images/ok.png"); else $('#wait3').attr("src", "../images/no.png"); blokada(); } $("#dostepnosc").change(function() { var dostepnosc = $('#dostepnosc').val(); if(dostepnosc != 'puste'){ $('#wait4').attr("src", "../images/ok.png"); kontrolka += 1; } else { $('#wait4').attr("src", "../images/no.png"); kontrolka -= 1; } blokada(); }); $("#kategoria").change(function() { var kategoria = $('#kategoria').val(); if(kategoria != 'puste'){ $('#wait5').attr("src", "../images/ok.png"); kontrolka += 1; } else { $('#wait5').attr("src", "../images/no.png"); kontrolka -= 1; } blokada(); }); $("#opcje_przesylki").change(function() { var opcje_przesylki = $('#opcje_przesylki').val(); if(opcje_przesylki != 'puste'){ $('#wait6').attr("src", "../images/ok.png"); kontrolka += 1; } else { $('#wait6').attr("src", "../images/no.png"); kontrolka -= 1; } blokada(); }); $("#opcje_platnosci").change(function() { var opcje_platnosci = $('#opcje_platnosci').val(); if(opcje_platnosci != 'puste'){ $('#wait7').attr("src", "../images/ok.png"); kontrolka += 1; } else { $('#wait7').attr("src", "../images/no.png"); kontrolka -= 1; } blokada(); }); $("#tagi").blur(function() { var tagi = $('#tagi').val(); if(tagi.length != 0){ $('#wait8').attr("src", "../images/ok.png"); kontrolka += 1; } else { $('#wait8').attr("src", "../images/no.png"); kontrolka -= 1; } blokada(); }); function blokada () { alert(kontrolka); if(kontrolka >= 9) $('#submit').html('<input class="submit" type="submit" value="Dodaj ›">'); else $('#submit').html('Niektóre pola nie zostały uzupełnione.'); }