Avatar billede ostehamster Nybegynder
01. november 2005 - 21:49 Der er 15 kommentarer og
1 løsning

Kun tal i et input felt?

Hejsa

Er det muligt, på en eller anden måde, at lave så man KUN kan indtaster tal i et input felt (<input type="text"....)?

Man kan jo sagtens lave validering, men det ville bare være lidt nemmere, hvis man slet ikke kunne sætte bogstaver osv ind?

mvh
Christoffer
Avatar billede skovenborg Nybegynder
01. november 2005 - 22:28 #1
Prøv:
<script type="text/javascript">
  var access = false;
  function numbersOnly(e) {
        e = (e) ? e : event;
        k = (typeof e.keyCode) ? e.keyCode : e.which;
        access = ((k >= 48 && k <= 57) || (k >= 96 && k <= 105));
  }
</script>

<input type="text" onkeydown="numbersOnly(event)" onkeypress="return access;">

Ellers kunne du også bare erstatte alle ikke tal med "" ved en onkeyup-event, men det bliver knap så pænt at se på ;-)
Avatar billede skovenborg Nybegynder
01. november 2005 - 22:34 #2
og hvis du absolut vil tillade, at brugeren også kan slette nogle af tallene igen skal du skrive:
function numbersOnly(e) {
        e = (e) ? e : event;
        k = (typeof e.keyCode) ? e.keyCode : e.which;
        access = ((k >= 48 && k <= 57) || (k >= 96 && k <= 105) || k == 8);
  }
Avatar billede ostehamster Nybegynder
01. november 2005 - 23:46 #3
Det er godt nok smart. De der tal, det er bare almindelige ASCII ikke?

Jeg ville gerne have DELETE med, så skrev || k==127, men det virker ikke?

Hvordan får jeg den med? Og hvad med pil-tasterne?
Avatar billede roenving Novice
02. november 2005 - 00:05 #4
Delete/backspace er nr. 8, pil-tasterne har ingen værdi på keypress, men 37-40 (venstre-op-højre-ned !-) på keydown og keyup !o[
Avatar billede ostehamster Nybegynder
02. november 2005 - 00:14 #5
roenving > Hmm, delete virker ikke som det er nu. Hvis jeg skriver 123456, bruger musen til at sætte cursoren i mellem 3 og 4, så kan jeg slette 123 med backspace, men kan ikke slette 456 med delete?
Avatar billede roenving Novice
02. november 2005 - 00:21 #6
46 på keydown/-up og ellers ingen !-)
Avatar billede roenving Novice
02. november 2005 - 00:23 #7
-- og forklaringen er, at værdierne på -down og -up er tastatur-koder, mens de på -press er ascii !o]
Avatar billede jaiz Nybegynder
02. november 2005 - 10:42 #8
du kan bruge Nan i javascript så tillader den kun tal :)
Avatar billede olebole Juniormester
02. november 2005 - 11:45 #9
<ole>

jaiz >> det lader ikke til, du helt forstår, hvad der tales om i tråden  :)

/mvh
</bole>
Avatar billede skovenborg Nybegynder
02. november 2005 - 14:54 #10
aah, nu forstår jeg meget bedre forskellene på de to events.

Det lader til, at i Mozilla finder onkeyup/down kun tastaturkoden (keyCode), mens der ved onkeypress findes _enten_ en tastaturkode eller en ascii-kode (charCode). Ascii-koden sættes kun man bruger fx tallene og bogstaverne, mens tastatur-koden stadigvæk sættes når man fx bruger piletasterne. Man skal altså (i Mozilla) skelne mellem disse to når man bruger funktionen ved press-eventen. I IE derimod findes der ikke nogen charCode, men her bruger den bare keyCode lige meget hvad.

Da jeg først lavede scriptet blev jeg derfor nød til at først køre funktionen ved onkeydown hvor jeg i Mozilla kunne finde tastatur-koden (keyCode) og derefter returnerer true eller false ved onkeypress (det er nemlig kun ved onkeypress du rent faktisk kan stoppe brugerens input). Men nu kan jeg se det meget lettere kan skrives som:

function numbersOnly(e) {
        e = (e) ? e : event;
        c = e.charCode;
        k = (typeof e.keyCode) ? e.keyCode : e.which;
        return ((c >= 48 && c <= 57) || (k >= 48 && k <= 57) || k == 8 || (k >= 37 && k <= 40) || k == 46);
  }

<input type="text" onkeypress="return numbersOnly(event);">
Avatar billede ostehamster Nybegynder
02. november 2005 - 21:14 #11
skovenborg > Det virker jo kanon, mange tak :) Liggger du et svar?

Et lille bonusspørgsmål: Er det også muligt, at lave så hvis der bliver tykket enter i et felt, så bliver en anden funktion kaldt?
Avatar billede skovenborg Nybegynder
02. november 2005 - 21:38 #12
det var så lidt :-)

Angående bonusspørgsmålet til 1000 kr. så er tastatur-koden 13 for enter. Dvs. du kan skrive:
onkeypress="if (event.keyCode == 13) {enFunktion();}"

Hvis dit felt er inden i en form, så vil enter-trykket jo typisk også submitte formen. Så du kunne jo også kalde funktionen med onsubmit-eventen:
<form onsubmit="enFunktion();">
evt. returnere enten true eller false afhængigt af om du vil have formularen sendt videre (submittes) eller ej.
Avatar billede skovenborg Nybegynder
02. november 2005 - 21:39 #13
jeg prøver lige igen - denne gang som svar ;-)
Avatar billede jaiz Nybegynder
03. november 2005 - 08:33 #14
ang. og lave en anden event du kan bare lave <form onsubmit=> eller du kan lave OnClick hvis du mer til den slags ;)
Avatar billede ostehamster Nybegynder
13. november 2005 - 17:27 #15
Jeg glemte da lige at acceptere
Avatar billede skovenborg Nybegynder
13. november 2005 - 17:31 #16
men tak for points alligevel ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester