Autor Zpráva
paolo
Profil *
Ahoj, nevíte, jak udělat, aby se do formulářového políčka (input=text) daly napsat pouze číslice a ne slova?
Nejlepší by bylo, kdyby se po napsání čehokoliv (písmena, mezery, různé znaky...) co není číslice ihned toto mazalo, ale pokud to jde udělat jinak, rád si nechám poradit. Děkuji.
Jan Tvrdík
Profil
Javascriptem je to nanic, můžu si ho vypnout.
paolo
Profil *
Počítejme s tím, že je JS zapnutý.
peta
Profil *
paolo
proc? kontroluj to pak v PHP.
http://www.volny.cz/peter.mlich/www.htm#mssub17
Ale jestli to chces primo prepisovat, tak musis odchytavat klavesy a porovnavat, zda se jedna o tvuj input a kdesi cosi, zbytecne komplikovane.
paolo
Profil *
Pokud by to šlo, tak bych to tedy přes PHP dělal, jen to na tom odkazu nikde nemohu najít :-(
Joker
Profil
Jan Tvrdík
Já bych ten JS až takhle neodsuzoval. Javascriptová kontrola může při správném použití mít význam. Jde o to, že můžete validovat data interaktivně, bez odeslání na server. Důležité ale je, že na serveru musíte ověřit data znova, nesmíte se spolehnout, že už byla ověřena Javascriptem.
Smysl Javascriptu je tady v tom, že klient nemusí čekat na odeslání formuláře a načtení nové stránky, jen aby zjistil že někde udělal chybu a mohl formulář odesílat znovu.

paolo
Dalo by se to udělat třeba regulárním výrazem, testovací funkce by mohla vypadat například takhle:

var policko = document.getElementById ? document.getElementById("policko") : false;
var regExp = /^(\d+)$/; // regulární výraz- začátek řetězce, pak jedna nebo víc číslic a konec řetězce
if(policko && policko.value && (policko.value != "")){
if(!regExp.test(policko.value)){
alert("Musíte zadat pouze čísla!");
policko.value = ""; // vymažeme hodnotu políčka
//případný další kód
}
}

Po vymazání hodnoty políčka by ještě šlo pomocí policko.focus() nastavit fokus zpět na políčko, což ale nemusí být v některých případech zrovna uživatelsky příjemné.

offtopic, zábavná historka:
kdysi jsem psal podobné skripty pro jednu intranetovou aplikaci, kde byly desítky políček a u mnoha byly na onblur() navázané i poměrně složité kontroly, které ještě navíc nastavovaly hodnoty některých dalších políček. Při neúspěšné kontrole se fokus vracel zpátky do toho políčka. No a samozřejmě co se nestalo: jednou se někde nastavila zrovna tak blbá hodnota, že způsobila neplatnost aktuálního políčka i následujícího políčka. Na tabulátor se vyvolalo onblur(), fokus se přepnul na následující políčko, provedla kontrola, vyhodila hláška a fokus přepnul zpátky na to první políčko... čímž vyvolal onblur toho druhého políčka, provedla se kontrola, vyhodila jiná hláška a fokus přepnul na to druhé políčko... čímž vyvolal onblur toho prvního políčka... až do doby, než to uživatele přestalo bavit a sestřelil IE přes task manager.
Uštěpačná poznámka, v Opeře by se tohle stát nemohlo, v Opeře stačí zaškrtnout "Zastavit provádění skriptů této stránky" ;-)
peta
Profil *
Joker
V podstate by mohlo stacit...
var x=neco.value;
if (x*1 == x) {je cislo}
else {neni cislo}

paolo
na tom odkazu jsou regularni vyrazy v JS
priklad na validaci je nekde v prikladech JS na jakpsatweb
peta
Profil *
Joker
"offtopic, zábavná historka:"
Jj, presne takovy "programatori" by nemeli vubec uverejnovat JS na inet, kdyz to neumi osetrit :)
Ve FF je take odstreleni scriptu za jisty casovy interval, jenze tys to mel osetri tak, aby se neco takoveho vubec nemohlo stat. A dyz uz, aby se script volal nejaky maximalni pocetkrat.
Joker
Profil
peta
V podstate by mohlo stacit...
if (x*1 == x) {je cislo}

Mohlo by, i když touhle kontrolou projdou například vstupy " 123 " anebo "0xaaa".

Jj, presne takovy "programatori" by nemeli vubec uverejnovat JS na inet, kdyz to neumi osetrit :)
Za prvé to na inet ani nikdy jít nemělo a za druhé se tahle chyba samozřejmě opravila ještě během vývoje ;)
peta
Profil *
Joker
Tak to s mezerou by nevadilo a to hexa, to je sporny, ale mozna take ne. Ale ten hexa by mi osobne vadil, to uznavam :)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0