Autor Zpráva
mafos
Profil
Dobrý den,

už pěknou dobu se trápím se skriptem na kontrolu vyplnění všech polí formuláře. Pokud chci jen běžnou kontrolu, tak není problém, řeším ji takto
function Kontrola(f) {
                var vysledek = true;
                var strerr = "";
                if (f.jmeno.value.indexOf(" ") == -1) strerr += "Jméno a příjmení\n";
                if (f.email.value.indexOf("@") == -1) strerr += "E-mail\n";
                if (isInteger(f.telefon.value) == false || f.telefon.value.length < 9) strerr += "Telefon\n";
                if (f.ulice.value=="") strerr += "Ulice a číslo domu\n";
                if (f.mesto.value=="") strerr += "Město\n";
                if (isInteger(f.psc.value) == false || f.psc.value.indexOf(" ") == -1 || f.psc.value.length < 6) strerr += "PSČ\n";
                if ("" != strerr) {
                    vysledek = false;
                    alert("Níže uvedená pole nejsou vyplněna, nebo jsou vyplněna chybně:\n\n" + strerr);
                    }
                return vysledek;
            }

ale když chci aby submit zešedivěl a povolil se až po vyplnění všech položek, tak je to problém. Řeším to takto
            function Submitbut(s,submitbutton) {
                submitbutton.disabled=true;
                if (s.jmeno.value.indexOf(" ") == -1){submitbutton.disabled=false;}
            }

a ve formuláři mám v inputu
onKeyPress="Submitbut(this,this.form['sub']);"
Ve chvíli kdy do toho skriptu dám např. if (1=1){submitbutton.disabled=false;} tak vše funguje, ale do té doby ne. Tak odhaduji, že to asi má nějakou spojitost s tím, že se asi nenačtou data z inputů, tak je asi nemůžu zkontrolovat, ale nevím jak to vyřešit jinak. Nenapadá Vás někoho něco?

Doufám, že jsem problém popsal srozumitelně. Kdyby ne, tak klidně cokoliv doplním.

Děkuji za pomoc
Joker
Profil
mafos:
V první řadě tohle nezkontroluje vyplnění všech políček, ale jakéhokoliv políčka (na které to je navázané).
Navíc to nekontroluje vyplnění, ale jestli hodnota pole neobsahuje mezeru (což prázdné pole taky neobsahuje).

Řešení by asi bylo předělat funkci Kontrola, aby nevyhazovala ten alert a jen vracela výsledek kontroly, alert dát jinam a používat tu funkci Kontrola i pro povolení odesílacího tlačítka.
mafos
Profil
Joker:
Navíc to nekontroluje vyplnění, ale jestli hodnota pole neobsahuje mezeru (což prázdné pole taky neobsahuje).
Ono to právě kontroluje jestli tam ta mezera je (Jméno a příjmení). Ale to je jedno.

A jak tedy předělat tu funkci kontrola? Ta kontrola se mi právě volá po stisknutí submitu, který by ale měl být zablokovaný dokud nejsou nějak vyplněná všechny políčka. Ale nevím, možná je to jen zbytečná dvojí kontrola. Mělo by to ale poznat to, že políčka jsou vyplněná a pak by to mělo zkontrolovat že jsou správně vyplněná (tedy mezera ve jméně, správný počet čísel v telefonu, zavináč apod.). Já se moc v javascriptu nevyznám, tak nevím co a jak by bylo vhodné předělat v tý funkci kontrola, aby povolovala i ten submit. Můžete mě zkusit nějak nakopnout? :-)

Děkuji


Tak ještě doplním, že bych potřeboval tu dvojí kontrolu. První kontrolou zjistit zda jsou vyplněna všechno povinná pole (nějak vyplněná, i chybně) a pokud ano tak odblokovat submit a druhou kontrolou po zmáčknutí submit zjistit jestli jsou vyplněná správně. Je to školní úkol a prostě to tak musí být. Díky za pomoc
_es
Profil
mafos:
Musíš prerobiť celú „logiku“ toho:
Po každej zmene ľubovoľného poľa skontroluješ, či sú všetky potrebné polia vyplnené a ak áno, tak zmeníš vlastnosť disabled odosielacieho tlačítka na false. No otázne je, či je vôbec také „čarovanie“ so zapínaním tlačítka vhodné a nebude lepšie a jednoduchšie skontrolovať vyplnené hodnoty až pred odoslaním formulára - udalosť onsubmit a podľa toho odoslanie formulára ponechať alebo zrušiť.
mafos
Profil
_es:
No otázne je, či je vôbec také ‚čarovanie‘ so zapínaním tlačítka vhodné
Školní úkol no. Taky mi to přijde jako kravina. Ale když to tak musí být tak to tak musí být. Dělám to pro jednoho známého a tak se chci přesně držet toho co mají v požadavcích.

Mohl bys mi prosím poradit jak zkontrolovat všechna ta pole? Prostě mi to nějak nemůže docvaknout. Moc neznám JS a tak nevím co a jak použít a co je všechno možné.

Děkuji
Joker
Profil
mafos:
Ono to právě kontroluje jestli tam ta mezera je (Jméno a příjmení). Ale to je jedno.
Nikoliv. Nejdřív se nastaví disabled na true (tj. neaktivní pole) a pouze v případě, že hodnota pole neobsahuje mezeru, se nastaví disabled na false (aktivní pole).

První kontrolou zjistit zda jsou vyplněna všechno povinná pole (nějak vyplněná, i chybně) a pokud ano tak odblokovat submit a druhou kontrolou po zmáčknutí submit zjistit jestli jsou vyplněná správně.
No, v tom případě bych to právě takhle udělal.
Povinná pole by šlo udělat i obecně: Dal by se jim HTML atribut required (v HTML 5 bude i validní), kontrolní funkce by prolezla formulář a hledala políčka, která mají atribut required a zároveň nemají nastavenou hodnotu.
mafos
Profil
Já fakt ale nevím jak na to :-( Nevíte někde prosím o nějakým vzorovým řešení?
_es
Profil
mafos:
Asi nejako takto:
<script>
function kontrola(){
  Tu skontroluješ všetky vstupné políčka a ak sú vyplnené, nastavíš odosielaciemu tlačítku vlastnosť disabled na false a ak nie, vrátiš z funkcie false
}
</script>
<form onsubmit="return kontrola()">
<input name=i1 onchange="kontrola()">
<input name=i2 onchange="kontrola()">
...
<input type=submit disabled value=odoslať>
</form>
mafos
Profil
Prostě jsem mimo. Pořád mi to nefunguje. Musím si dát na chvilku pauzu a pak to třeba bude lepší.

Díky za pomoc. Kdyžtak se ještě ozvu :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: