for (i=0; i<f.talfelt.length; i++){ if (lovlige.indexOf(f.talfelt.charAt(i)) < 0)) { alert("Navnet kan kun bestå af bogstaver"); f.talfelt.focus(); return false; } } return true; }
Nu er jeg jo ingen JavaScript ekspert, men jeg har lavet nogle ændringer i scriptet, så det nu ser således ud:
1 function validate(f) { 2 var lovlig = "0123456789"; 3 4 for (i=0; i<f.Pris.length; i++){ 5 if (lovlig.indexOf(f.Pris.charAt(i)) < 0) { 6 alert("Navnet kan kun bestå af bogstaver"); 7 f.Pris.focus(); 8 return false; 9 } 10 } 11 return true; 12 }
I linie 5 var der en parentes for meget og der stod "lovlige", hvilket vel skal være "lovlig".
Men ikke desto mindre virker det ikke. Form starten ser således ud: <form action="..." method="POST" Name="ff" onsubmit="return validate(document.ff);">
Fejlen, den kommer med er at der fejl i sidstnævnte linie.
function validate(f) { var lovlige = "0123456789"; for (i=0; i<f.talfelt.value.length; i++){ if (lovlige.indexOf(f.talfelt.value.charAt(i)) < 0) { alert("Navnet kan kun best\345 af tal"); f.talfelt.focus(); return false; }else{ f.submit(); } } }
Den altid årvågne JavaScript-ørn har jo ret. Jeg havde vist bare glemt at skrive "value" et par steder - og et par andre ting. Det her virker nemlig også, Ole. ;-)
Jeg synes det er en fordel, eksplicit at nævne de lovlige tegn, for så er det nemt at udvide med andre lovlige tegn,
<html> <head> <script language="javascript"> <!-- function validate(f) { var lovlig = "0123456789"; for (i=0; i<f.pris.value.length; i++){ if (lovlig.indexOf(f.pris.value.charAt(i)) < 0) { alert("Må kun bestå af cifre"); f.pris.focus(); return false; } } return true; } //--> </script> </head> <body> <form name=ff ONSUBMIT="return validate(document.ff)"> <input type=text name=pris> <input type=submit> </form> </body> </html>
Det virker stadig ikke. Kan det være fordi jeg har flere functions, der skal køres? Hvordan skal det skrives i ONSUBMIT="return validate(document.ff)"-sætningen, hvis nu denne function: onClick="return CheckOgIndryk()" også skal med?
OK, I får hele alt det relevante. Jeg laver en del valideringer af andre felter, og de virker fint. Jeg har smidt hele javaScriptet med samt <form>-tag'en, <pris input felt>-tag'en og <submit>-tag'en
<script language="JavaScript"> <!-- Hide me from these old browsers . . . // Tekstens maksimale længde maxantal = 250 function Check() { formen = document.forms[0] // Check om antal tegn i annoncefeltet overskrider grænsen antal = formen.Tekst.value.length if (antal > maxantal) { alert( 'Annonceteksten er på ' + antal + ' tegn. Den maksimalt tilladte længde er ' + maxantal + ' tegn!' ) return false }
// Check for at overskrift ikke er tomt
if (formen.Overskrift.value == "") { alert('Der skal skrives en overskrift!') return false }
// Check for at Headliner ikke er tomt
if (formen.Headliner.value == "") { alert('Der skal skrives et navn for Kunstner, Band, Foredragsholder eller lignende!') return false }
// Check for at Kontaktperson ikke er tomt
if (formen.Kontakt.value == "") { alert('Der skal skrives en e-mailadresse for Kontaktpersonen!') return false }
// Check for at Tekst ikke er tomt
if (formen.Tekst.value == "") { alert('Der skal skrives en Tekst!') return false } // Check for at Geografi ikke er tomt
if (formen.Geografi.value == "") { alert('Der skal vælges mindst en landsdel!') return false } // Check for at Pris er mellem 1-99
// Check for at Kategori er valgt
if (formen.Kategori.value == "") { alert('Husk at vælge en Kategori!') return false }
// Check for at Kontakt er med @
if (formen.Kontakt.value.indexOf("@") != -1) { formen.submit() } else { alert('Kontaktpersonens e-mailadresse er ikke korrekt') return false }
function validate(f) { var lovlig = "0123456789"; for (i=0; i<f.pris.value.length; i++){ if (lovlig.indexOf(f.pris.value.charAt(i)) < 0) { alert("Må kun bestå af cifre"); f.pris.focus(); return false; } } return true; }
Som udgangspunkt bør du have eeeeeen valideringsfunktion. Der checker du alt. Hver check siger "alert" et eller andet + "return false" hvis der er noget galt. Den bør også lave et focus() til det felt der er fejl i. Hvis ingen af dine checks giver fejl, står der en "return true" nederst i funktionen. Den bliver så udført når alt er gået godt. Og brug så "onsubmit" - eller hvad Ole Ørn?
Nej - problemet med Oles løsning er, at hvis en bruger har slået JavaScript fra, vil der ikke blive submittet noget. Det vil der med min løsning - omend det så ikke bliver checket.
function validate(f) { var lovlig = "0123456789"; for (i=0; i<f.pris.value.length; i++){ if (lovlig.indexOf(f.pris.value.charAt(i)) < 0) { alert("Må kun bestå af cifre"); f.pris.focus(); return false; } }
if (f.Kategori.value == "") { alert('Husk at vælge en Kategori!') return false }
Ja, det har du jo alt sammen ret i, men jeg fatter bare ikke, hvordan for, hvis den funktion, du har skrevet, skal være der og den anden (CheckOgIndryk)også skal være der, så bliver der vel to som skal køres ved submit.
Jeg ville meget gerne integrere function validate(f) scriptet i alt det andet. Kan det ikke lade sig gøre?
<ole> Problemet er vist, at I taler forbi hinanden!
Erik's løsning virker, når man har slået JavaScripting fra (...og det er SATANS ærgeligt, man kan det...men det kan man altså!). Den gør det - ved at man lægger kaldet på 'onsubmit' - at den submitter formen og DEREFTER checker, om alt var rigtigt udfyldt...altså (undskyld, Erik) en fuldstændig overflødig funktionalitet. Her behøver du ikke funktionen 'CheckOgIndryk()'. Der submittes direkte ved tryk på knappen - IKKE via JavaScript.
Min løsning kræver, at JavaScripting er slået til, men checker til gengæld formen INDEN den submittes.
Normalt er jeg 'fundamentalist', når det gælder, hvem der skal kunne have glæde af en side. ALLE skal kunne se den, plejer at være min ufravigelige holdning. MIN grænse ligger dog ved JavaScript, der efterhånden er så integreret i WWW, at det på mig virker tåbeligt at slå det fra. Hvis folk alligevel gør det, må det være deres eget ansvar, at de afskærer sig selv fra at se laaaaangt de fleste sider på WWW.
Man KUNNE godt lave en løsning, der tilgodeser alle, meeeen...der MÅ være grænser ;-)
Du glemmer vist, Ole Ørn, at Microsoft rent faktisk har anbefalet brugerne af visse af deres nyere browsere, at slå JavaScript fra, undtagen til steder de har tillid til.
Der var nemlig noget med at deres fabelagtige programmører havde fået lavet et hul, så man fra en hjemmeside kunne hente en fil, blot man kendte navnet.
Det er der nok ingen almindelig mennesker, der gør, men jeg tror nok, at enkelte større virksomheder, som vil have styr på sikkerheden, gør det for deres ansatte.
Og selv den fejl så - vistnok - er rettet i deres nyeste browser, så kan der sagtens opstå et nyt tilsvarende problem hos dem, eller hos andre browserfabrikanter.
En rigtig professionel side tager højde for dette, og tillader navigering, hvis JavaScript er slået fra, men en navigering som måske ikke er så smart.
Synes godt om
Ny brugerNybegynder
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.