12. februar 2004 - 22:40Der er
9 kommentarer og 2 løsninger
bestemme om input er en integer eller ej
hejsa, jeg har et lille problem med flg. kode (strikket sammen af stumper fundet på exp.dk og hjemmelavede stumper)
<SCRIPT LANGUAGE="JavaScript"> <!-- function isInt(num){ if (typeof num == "number"&&num.toString().indexOf(".") == -1) return true; else return false; }
function checkInput() { if (document.upload.title.value == "") { alert("please enter a title!"); return false; } if (document.upload.resolution.value == "") { alert("You Have to Specify a Resolution"); return false; } if (!isInt(document.upload.resolution.value)) { alert("You have to specify an Integer for the resolution!"); return false; } }
ovenstående bruges i via onsubmit="return checkInput()"
problemet ligger i valideringen af mit input felt resolution (text felt) ligemeget om jeg intaster en Int så får jeg stadig at vide jeg ikke har intastet nogen int.. håber nogen kan se fejlen..
selve isInt() funtionen er der intet galt med, men problemmet opstår da dit input-felts value som standard er en string (tekst). Så du kan istedet sige: function isInt(num){ if (typeof num == "number"&&num.toString().indexOf(".") == -1) return true; else if (typeof num == "string"&& num.search(/[^0-9\.]/i) == -1 && num.indexOf(".") == -1) return true; else return false; }
--- det er vel at mærke også muligt at få en integer ud af strenge: parseInt(document.upload.resolution.value) - så behøver man heller ikke at teste. Dog kan brugeren samtidig godt skrive noget andet end en integer i selve formen - du har bare mulighed for at javascript "leder" efter et tal indeni formværdien.
>>"det er ikke mugligt at lave et HTML input som kun sender integers?" Ikke umiddelbart. Test på strenge giver dig også større fleksibilitet. Her f.eks. 3 versioner af din isInt funktion:
Version1: Tillader alle hele positive tal og 0, men også "ugyldige" værdier som "007". function isInt( num ){ return /^\d*$/.test( number ); }
Version2: Tillader alle hele positive tal. Tillader ikke 0 og tillader ikke "ugyldige" strenge som "007". function function isInt(num){ return /^[1-9]\d*$/.test( num ); }
Version3: Tillader alle hele positive tal og 0. Tillader ikke ugyldige tal som "007". function isInt(num){ return /^(0|([1-9]\d*))$/.test( num ); }
du kunne vel altid bare teste om der er tastet et tal ind eller ej (løbende): function checkInput(elm) { if (elm.value.charAt(elm.value.length-1).search(/[0-9]/i) != -1) return true; else {elm.value = elm.value.substring(0,elm.value.length-1);return false;}
}
og så put det her ind i dit input-felt: <input type="text" onkeyup="checkInput(this);" />
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.