Autor Zpráva
EquilibriumX
Profil *
Ahoj,
mám textový input, do nějž by se měla psát pouze čísla a pouze v určitém rozsahu. Na formuláři na událost onsubmit chci volat funkci, která ošetří ten rozsah (to mám), ale i přes to mi přes formulář projdou znaky. Jak ošetřit, aby se nemohly zadat znaky? Resp. jak lze odlišit znak od čísla?

Děkuju za odpověď!
Hugo
Profil
Asi nejlip pomoci regularnich vyrazu, mozna v JS existuje obdoba Is_Numeric() z php, ale to bohuzel nevim.
Mistr
Profil
Zkus třeba obsah toho inputu vynásobit jedničkou a uvidíš. Když Ti to zahlásí nějakou čuňárnu, tak to číslo není. Jinak to je OK. Ale nevím, zda to bude fungovat, ruku do ohně za to nestrkám.

Ještě upozorňuji, že JavaScript, protože je z anglického prostředí, používá tečku (nikoliv čárku!) k oddělení desetinných míst.
EquilibriumX
Profil *
Děkuju za rady!

Pro ostatní: trošku jsem zapátral a zjistil, že přímo JavaScript obsahuje funkci na zjištění, zda je zadaný řetězec (číslo) znak nebo číslo.

isNaN() vrací false, pokud je řetězec předaný v parametru pouze číslo..
Mistr
Profil
Mě to napadlo, ale nebyl jsem si úplně jistý, tak jsem Tě nechtěl mást.
Rob
Profil
Já vím, že pokud použiješ window.prompt(), tak ti to do proměné uloží číslo pokud ho tam napíšeš.
Pajuc
Profil *
Ahoj,

kdysi dávno jsem našel skript, který přímo blokoval anumerické znaky. Princip je tento: po stisku klávesy se zavolá funkce, která zjistí kód klávesy. Podle toho se rozhodne, zda se znak napíše. Výhoda je jasná - uživatel hned zjistí, že do políčka číslice psát nemůže (ledaže by je tam vložil).
Ale podotýkám, že přiřazený kód některých kláves se mění při změně jazyka klávesnice a nezjišťoval jsem, jak je tomu u těch číselných.



function jencisla() {
var evt=(e) ? evt:(window.event) ? event:null;
if(evt)
{
var kCode = (evt.charCode) ? evt.charCode :
((evt.keyCode) ? evt.keyCode :
((evt.which) ? evt.which : 0));
}
if (keyCode<48 || keyCode>57) Odstran_posledni_napsany_znak() }
}
peta
Profil *
Pajuc nejaky slozity :)
function klavesa2(e)
{var k;
if (!e) e=window.event;
k=(e.which)?e.which:e.keyCode;
if (k<48 || k>57) Odstran_posledni_napsany_znak()
}

a dokonce misto k to lze priradit to ecka
e=(e.which)?e.which:e.keyCode;
Pajuc
Profil *
>Pajuc nejaky slozity :)
Co kdyby sis ten můj kód (on vlastně není můj) prošel pozorněji :) Jinak proti zjednodušení nic nemám, pusť se do toho znovu.
Leo
Profil
isNaN ovsem vrati true treba na takovyhle retezec: 0xaf (cislo v sestnactkove soustave), Leo
Pajuc
Profil *
To se dá ošetřit tím, že se převede do desítkové soustavy, ne?
toString(10)
Leo
Profil
Da a neda (po konverzi vam vznikne cislo, a isNaN vrati false, i kdyz uzivatel napise neco, co cislo v desitkove soustave neni), existuji i jine zpusoby, napr parseInt, parseFloat, atd. Leo
Toto téma je uzamčeno. Odpověď nelze zaslat.

0