Autor Zpráva
petulienka
Profil *
Mám pomocí javascriptu takovou funkci
function onlyNumbers(e)
{
var keynum;
var keychar;
var numcheck;

if(window.event) // IE
  {
  keynum = e.keyCode;
  }
else if(e.which) // Netscape/Firefox/Opera
  {
  keynum = e.which;
  }
keychar = String.fromCharCode(keynum);
numcheck = /[\d\x00-\x1F\x7F]/;  //prijma pouze cisla + specialni znaky typu backspace, delete a sipky
return numcheck.test(keychar);
}

Funkce by měla hlídat, aby se do inputu zadávali pouze číslice.

Takhle ji na inputu volám
<input type="text" value="" id="mojeid" name="moje" onkeypress="return onlyNumbers(event)" />

V IE všechno v pohodě, můžu tam vkládat z klávesnice, vkládat pomocí Ctrl+V, ale do FF můžu zadávat pouze ručně, anebo kliknout pravým tlačítkem myši a dát Vložit, nejde použít Ctrl+V.

Tuší někdo prosím proč?

Moderátor Chamurappi: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
fajzen
Profil
Pretože aj stlačenie Ctrl+V vyvolá udalosť keypress a keďže Ctrl ani V nie sú čísla, akcia sa zruší... V IE je asi iné poradie vloženia a vyvolania udalosti, preto je to možné...

Kontrola na číslice by sa dala spraviť aj oveľa jednoduchšie (aj keď možno nie tak elegantne :) ):
function onlyNumbers(el) { if(el.value != '-') el.value = parseInt(el.value, 10) || '' }

a volanie:
<input type="text" value="" id="mojeid" name="moje" onkeyup="onlyNumbers(this);" />


// Edit: zabudol som ošetriť záporné čísla (keď je prvý a jediný znak '-' (mínus)
// Edit2: takto pôjdu zadávať iba celé čísla... pre desatinné čísla by to presa len chcelo nejaké zložitejšie riešenie
Chamurappi
Profil
Reaguji na petulienku:
Tuší někdo prosím proč?
Proto, že Ctrl+V není číslo. Musíš opodmínkovat tuto situci. V e.ctrlKey najdeš true, pokud je stisknutý Ctrl.


Reaguji na fajzena:
To mi připadá na první pohled jako nepoužitelné řešení — co to udělá při přenastavení value s pozicí kurzoru? Zkoušels to?
fajzen
Profil
Chamurappi:
co to udělá při přenastavení value s pozicí kurzoru? Zkoušels to?

Priznám sa, že nad týmto som predtým naozaj nerozmýšľal... Ale po tvojej otázke som to otestoval (IE8, FF3.5, Opera 10) a myslím, že to obstálo- kurzor zostane v inpute na konci

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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