01. juli 2005 - 13:29Der er
18 kommentarer og 1 løsning
Input felt > kun tal
Hejsa, Kan det lade sig gøre at lave et script som gør at man kun kan indtaste tal i et input felt... den skal ikke komme med en fejlmeddelelse, men der skal simpelthen ikke ske noget hvis man taster andet end tal ind.... how how how?
Jo, du kan bare fjerne det kode du synes er overflødig - det er ikke et krav at man sætter kontrollen op på den måde jeg har gjort, men jeg synes bare det var så rart at man blot skal tildele en klasse til de kontroller man vil have validering på og så ikke ændre på noget andet... men det er jo en smagssag :)
Er det hele koden du synes er voldsom eller er det bare fordi der ligger meget kode på selve formular-siden?
Tag dette script og gem det i en fil der hedder fieldvalidate.js
// ============================================================ // Sørger for at indholdet i et felt er numerisk. // Feltet skal være af klassen floatinput eller numinput. // floatinput tillader 0 eller 1 komma og tal. // numinput tillader kun tal og altså ikke komma. // ============================================================ function ensureNumeric() { function isAllowed(ord, allows) { var bRes = false; bRes = allows.indexOf("," + ord + ",") > -1; return bRes; }
var elm = event.srcElement; var ord = event.keyCode; var allowed = ",8,9,35,36,37,38,39,40,46,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105,"; if(elm.className == "floatinput" && elm.value.indexOf(",") < 0) allowed += "110,188,";
// ============================================================ // Formatterer indholdet af et numerisk felt, så det sikres at // tal indtastet er valide heltal eller kommatal. // Hvis der på input-feltet er defineret en attribut som hedder // "minvalue" kan feltets værdi ikke være mindre end denne. // ============================================================ function formatNumeric() { var elm = event.srcElement;
if(elm) { var minval = elm.getAttribute("minvalue") + ""; var v = parseFloat("0" + elm.value.replace(",",".")); if(minval != "") if(v < minval) v = parseFloat(minval); elm.value = v.toString().replace(".",","); } }
Tag derefter inkludere dette script i HTML-siden vha. linien:
<script type="text/javascript" src=""></script>
Derefter tilføjer du eventhandlers for onkeydown og onblur som følger:
Hvis du sætter inputfeltets class-attribut til "floatinput", håndhæver rutinen "ensureNumeric" kommatal (hvilket betyder at det også er tilladt at indtaste 0 eller 1 komma). Attributten "minvalue" er en mindsteværdi som feltet skal antage, hvis der angives en mindre værdi sættes indholdet til værdien i "minvalue".
Mht. om der er penge i at være javascript-nørd... tjaaa, så må jeg være dig svar skyldig - jeg har aldrig prøvet at have det som min primære beskæftigelse ;)
Det er et meget interessant script softspot har leveret. Tænk, jeg har aldrig før mødt en indlejret funktion i Javascript! Jeg har efterlyst muligheden, men troede slet ikke at den fandtes.
Nå, til sagen.
Jeg synes jeg kan høre, at crapman gerne vil have et supersimpelt script. Derfor har jeg leget lidt med softspot's kode (som indeholder en hel del ukendte udtryk for mig!)
Jeg har kortet det ned til et lille dokument, som kun godkender CIFRE (altså ikke noget med decimaltal).
Koden virker desværre kun i Internet Explorer. Men det samme tror jeg gælder crapman's kode. Hvis nogen af jer har et Cross-Browser alternativ, vil jeg gerne se det.
roenving skriver: > hvad mener du med 'indlejret funktion'?
At en funktionserklæring indeholder en anden funktionserklæring: function ensureNumeric() indeholder function isAllowed(ord, allows).
Jeg troede bare ikke man kunne gøre det. (Måske er det en nyere facilitet. Måske har den hele tiden været der. Jeg har bare ikke været opmærksom på den. I programmeringssproget Pascal brugte vi den.)
-- det er den type objekt-orienteret programmering, man kan lave i javascript ...
-- hvis man skal skabe objekter skal man erklære en constructor som en funktion, og der kan man så direkte have eventuelle metoder, eller man kan prototype sig til dem !-)
-- og prototype har været med længe, såvidt jeg umiddelbart kan bedømme må det være javascript 1.1 !o]
- det kan f.eks. bruges, hvis man har en større funktion med flere/mange små, tilhørende hjælpe-funktioner, som man nødigt vil have liggende og 'flyde' i det globale scope :)
crapman -> Det er ikke min kode, det er kun en discount-udgave af softspot's kode. softspot's kode kan det hele! Erstat funktionen med denne:
function CheckCiffer() { var ord = event.keyCode; var allowed = ",8,9,35,36,37,38,39,40,46,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105,"; if (allowed.indexOf("," + ord + ",") < 0) {event.returnValue = false;} }
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.