Avatar billede Slettet bruger
29. juli 2004 - 06:48 Der er 12 kommentarer og
1 løsning

Check for tekst og enter

Hej.

Jeg sidder og filosofere over om hvordan man gør dette:

Jeg har nogle felter i en form. Jeg vil gerne have kontrol på om der er skrevet noget i feltet.

Jeg vil også gerne at man kan trykke på enter/retur foruden man kan bruge tab og mus.

Noget i stil med:

funktion ( navn ) {
hvis længen af feltet <> 0 og trykket på enter eller trykket på tab eller linie skiftet med musen {
  return true;
} else {
  skriv "Du har ikke udfyldt feltet"
}
}

Hvordan kan man gøre det i en javascript funktion ?

I form input skal det vel så være onchange="validateTekst"

Eksempler efterlyses eller vis gerne noget der virker her.

Jeg har forsøgt at finde noget her, men jeg synes ikke lige jeg kan finde noget der ligner.

På forhånd tak.
Avatar billede Slettet bruger
29. juli 2004 - 06:52 #1
Jeg må hellere tilføje, at jeg kender meget lidt til javascript. Så det skal helst skæres ud i pap :)
Avatar billede roenving Novice
29. juli 2004 - 08:41 #2
Er det sådan noget ?-)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Check alle felter for udfyldelse</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
function checkForm(f){
    var txt = "",fjl;
    var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
    var regexp = new RegExp("^["+t+"]["+t+"\\.\\-]*@["+t+"]["+t+"\\.\\-]*\\.[\\w]{2,6}$","i");
    var regcurr = /^([\-\+]?[1-9]\d{0,2}((\.\d{3})*|\d*)(\,\d{2})?)?$/;
    for(i=0;f.elements.length>i;i++){
        fld = f.elements[i]
        if ((fld.tagName=='TEXTAREA'||fld.type=="text")&&fld.value==fld.defaultValue){
            txt+="\n\t"+fld.name;
            if(!fjl)fjl = fld;
        }else if (fld.name.toLowerCase().indexOf("mail")>-1){
            if (!regexp.test(fld.value)||/(\.@|\-@|\-\-|\.\.)/g.test(fld.value))txt+="\n\t"+fld.name+" -- ikke korrekt mail-adresse-format";
            if(!fjl)fjl = fld;
        }else if (fld.name.toLowerCase().indexOf("curr")>-1){
            if (!regcurr.test(fld.value))txt+="\n\t"+fld.name+" -- beløb skal angives i et korrekt format";
            if(!fjl)fjl = fld;
        }
    }
    if(txt!=""){
        txt = "Du mangler at udfylde disse felter:\n"+txt+"\n\nAlle felter skal udfyldes";
        alert(txt);
        fjl.select();
        fjl.focus()
        return false;
    }
    return true;
}
</script>
</head>
<body>
<br>
<form id="minForm" name="minForm" action="" method="get" onsubmit="return checkForm(this);">
Input1: <input id="minInput1" name="input1" type="text" value="Tom" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="30"><br>
Input2: <input id="minInput2" name="Input2" type="text" value="Tom" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="30"><br>
Input3: <input id="minInput3" name="input3" type="text" value="Tom" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="30"><br>
E-mail: <input id="minInput4" name="Email" type="text" value="name@domain.topDomain" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="30"><br>
Kommentar: <textarea name="Kommentar" cols="80" rows="5" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"></textarea><br><br>
<input type="submit" value="Send data">
</form>
</body>
</html>
Avatar billede Slettet bruger
29. juli 2004 - 08:43 #3
Det var en stor een :-) Den skal jeg lige lege lidt med, så kommer jeg igen. Foreløbig tak.
Avatar billede Slettet bruger
29. juli 2004 - 08:54 #4
Det er ikke helt sådan. Jegforestillede mig at man kunne bruge enter til at skifte linie med, men det er ikke sikkert man kan. Når man trykker enter virker den som når man trykker på send data, altså er færdig med at udfylde.

Jeg forestiller mig at den har en simpel check på om der er skrevet noget i feltet med det samme når man skifter linie, så man får det at vide med det samme.

Kan du ikke gøre det meget mere simpelt ? Det er så stort, at jeg ikke tror jeg vil være istand til at pille det ud af det, som jeg skal bruge.
Avatar billede Slettet bruger
29. juli 2004 - 09:52 #5
Hmmm, jeg skrev et indlæg, men det forsvandt. Mystisk.

Jeg har fået bikset dette sammen:

function validateSkole( flt ) {
  if (flt.value != "") {
    return true;
  } else {
  txt = "Feltet må ikke være tomt";
  alert(txt);
        flt.select();
        flt.focus()
  return false;
  }
}

Det virker næsten. Det kommer med fejl også når man klikker uden for browseren.

Det er også kun muligt at bruge det til Skole feltet, tror jeg. Jeg ville gerne have samme function til at virke ved flere felter uden at lave en for hvert felt. Men hvordan ?

Og jeg har et felt hvor der KUN må stå tal i, det kunne jeg også godt tænke mig at checke for.
Avatar billede Slettet bruger
29. juli 2004 - 10:56 #6
Hmm, man skal vist passe lidt på hvad man laver. Jeg lavede en test, og så gik det hele i selvsving. Man kunne ikke komme ud af fejlmeddelsen igen :-)

Den kan jeg ikke rigtig regne ud.
Avatar billede Slettet bruger
29. juli 2004 - 15:18 #7
Nu har jeg pillet i det store du sendte:

function checkForm(f){
    var txt = "",fjl;
    var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
    for(i=0;f.elements.length>i;i++){
        fld = f.elements[i]
        if ((fld.tagName=='TEXTAREA'||fld.type=="text")&&fld.value==fld.defaultValue){
            txt+="\n\t"+fld.name;
            if(!fjl)fjl = fld;
        }else if (fld.name.toLowerCase().indexOf("mail")>-1){
            if(!fjl)fjl = fld;
        }else if (fld.name.toLowerCase().indexOf("curr")>-1){
            if (!regcurr.test(fld.value))txt+="\n\t"+fld.name+" -- beløb skal angives i et korrekt format";
            if(!fjl)fjl = fld;
        }
    }
    if(txt!=""){
        txt = "Du mangler at udfylde disse felter:\n"+txt+"\n\nAlle felter skal udfyldes";
        alert(txt);
        fjl.select();
        fjl.focus()
        return false;
    }
    return true;
}

Menden tager de sidste 5 med som check og det skal den ikke, da det er sat ind automatisk, og den derfor tror at felterne er tomme. Hvordan kommer man omkring det ?

Der er sikkert stadig formeget i functionen, men jeg kan ikke overskue den. Og så ser jeg der er et beløbformat check - det måtte godt være et check på at det KUN er tal der er skrevet i de felter. Men hvordan roder man i såden noget stort noget, når man kun kan sidde og gætte sig til det, og prøve det af i praksis. Det er noget langsommeligt :-)
Avatar billede Slettet bruger
29. juli 2004 - 15:20 #8
Nå det er nu kun 4 felter og ikke 5 som jeg skrev.
Avatar billede Slettet bruger
29. juli 2004 - 15:27 #9
De 4 første felter skal checkes for om der står noget i dem, ikke andet.

De næste to skal så checkes for at det KUN er tal deri, og ikke andet. Er den tom er det jo ikke tal :-)

Kan man ændre den funktion til kun at gøre det ? Resten af felterne skal den bare springe over og heller ikke skrive at der ikke står noget i dem, da der er puttet tekst ind automatisk via php, og det kan den jo ikke se.
Avatar billede Slettet bruger
29. juli 2004 - 16:13 #10
Er der slet ikke nogen der har forslag.

(nu er det anden gang i dag jeg har sendt et indlæg, der bare ikke bliver gemt her )
Avatar billede Slettet bruger
30. juli 2004 - 06:26 #11
roenving  -  Smid lige et svar. Jeg tror jeg dropper at rode mere med det lige nu. Der skal nok lige læses en del først, og det har jeg ikke lige tid til.

Det eksempel du sendte er rigtig smart, bare ikke lige til min formulat :-) Jeg er sikker på at jeg vil bruge det senere til noget sjovt.

Men tak for eksempelet.
Avatar billede roenving Novice
30. juli 2004 - 12:55 #12
Velbekomme '-)
Avatar billede roenving Novice
30. juli 2004 - 13:13 #13
-- og tak for point ;~}
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