Avatar billede nicolailissau Nybegynder
19. april 2009 - 21:07 Der er 16 kommentarer og
2 løsninger

Form validation - hvordan udskriver jeg tekst under <input>?

Hej Eksperter.

Som overskriften antyder vil jeg gerne, hvis der er en fejl i det indtastede, udskrive hvad fejlen er, under det tilhørende <input> tag.

Det skal siges at jeg er forholdsvis ny i JavaScript :)

Jeg har fundet eksempler på hvordan fejlen kan udskrives med onSubmit="return formValidation(this)"; hvori funktionen formValidation() så returner alert(). Det fungerer - men det er bare ikke sådan jeg vil have det ;)

Håber i kan hjælpe

Mvh
Avatar billede majbom Novice
19. april 2009 - 21:16 #1
du kan lave en div under den pågældende input, som evt, har et id der nemt kan "regnes ud" ud fra navn/id på inputtet, så du kan lave den rimelig flexibel.

hvordan ser din kode ud med din alert?
Avatar billede troelss Nybegynder
19. april 2009 - 21:17 #2
Hej.

Jeg vil tro at det er innerHTML du er ude efter.
Det kan dynamisk ændre teksten på en siden uden reload.

http://www.tizag.com/javascriptT/javascript-innerHTML.php

Du kan helt sikkert bruge det sammen med den formValidation du skriver om.
Avatar billede majbom Novice
19. april 2009 - 21:22 #3
du skal ikke bruge innerHTML!! (hvis du er grøn i JS, kan du ligeså godt starte med at lære DOM med det samme, inden du overhovedet finder ud af hvad innerhtml er ;) )

og til noget så simpelt, er det NÆSTEN lige så nemt at bruge korrekt DOM.

smid hvad du har nu, så skal jeg se om jeg kan lave det om til det du ønsker.
Avatar billede nicolailissau Nybegynder
19. april 2009 - 21:25 #4
#2.
Det var lige det jeg ledte efter. Mange tak, smider du et svar?
Avatar billede troelss Nybegynder
19. april 2009 - 21:27 #5
Jeg er ikke stærk i JS og DOM, så jeg skal ikke kunne sige om splazz's løsning er bedre.
Jeg ved bare at det virker for mig ;)
Avatar billede nicolailissau Nybegynder
19. april 2009 - 21:29 #6
#3
DOM? Hvad er det?

Jeg vil gerne lige se hvad du kan gøre. Det skal siges at det jo er et script jeg har fundet, men forstår godt helheden:

<html>
<head>
<title>WebCheatSheet - JavaScript Tutorial</title>
<script type="text/javascript">
function validatePhone(fld) {
    var error = "";
    var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, '');   

  if (fld.value == "") {
        error = "You didn't enter a phone number.\n";
        fld.style.background = 'Yellow';
    } else if (isNaN(parseInt(stripped))) {
        error = "The phone number contains illegal characters.\n";
        fld.style.background = 'Yellow';
    } else if (!(stripped.length == 10)) {
        error = "The phone number is the wrong length. Make sure you included an area code.\n";
        fld.style.background = 'Yellow';
    }
    return error;
}
function trim(s)
{
  return s.replace(/^\s+|\s+$/, '');
}

function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.value);                        // value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;
    var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ;
   
    if (fld.value == "") {
        fld.style.background = 'Yellow';
        error = "You didn't enter an email address.\n";
    } else if (!emailFilter.test(tfld)) {              //test email for illegal characters
        fld.style.background = 'Yellow';
        error = "Please enter a valid email address.\n";
    } else if (fld.value.match(illegalChars)) {
        fld.style.background = 'Yellow';
        error = "The email address contains illegal characters.\n";
    } else {
        fld.style.background = 'White';
    }
    return error;
}
function validatePassword(fld) {
    var error = "";
    var illegalChars = /[\W_]/; // allow only letters and numbers

    if (fld.value == "") {
        fld.style.background = 'Yellow';
        error = "You didn't enter a password.\n";
    } else if ((fld.value.length < 7) || (fld.value.length > 15)) {
        error = "The password is the wrong length. \n";
        fld.style.background = 'Yellow';
    } else if (illegalChars.test(fld.value)) {
        error = "The password contains illegal characters.\n";
        fld.style.background = 'Yellow';
    } else if (!((fld.value.search(/(a-z)+/)) && (fld.value.search(/(0-9)+/)))) {
        error = "The password must contain at least one numeral.\n";
        fld.style.background = 'Yellow';
    } else {
        fld.style.background = 'White';
    }
  return error;
}
function validateUsername(fld) {
    var error = "";
    var illegalChars = /\W/; // allow letters, numbers, and underscores

    if (fld.value == "") {
        fld.style.background = 'Yellow';
        error = "You didn't enter a username.\n";
    } else if ((fld.value.length < 5) || (fld.value.length > 15)) {
        fld.style.background = 'Yellow';
        error = "The username is the wrong length.\n";
    } else if (illegalChars.test(fld.value)) {
        fld.style.background = 'Yellow';
        error = "The username contains illegal characters.\n";
    } else {
        fld.style.background = 'White';
    }
    return error;
}
function validateEmpty(fld) {
    var error = "";
 
    if (fld.value.length == 0) {
        fld.style.background = 'Yellow';
        error = "The required field has not been filled in.\n"
    } else {
        fld.style.background = 'White';
    }
    return error; 
}
function validateFormOnSubmit(theForm) {
var reason = "";

  reason += validateUsername(theForm.username);
  reason += validatePassword(theForm.pwd);
  reason += validateEmail(theForm.email);
  reason += validatePhone(theForm.phone);
  reason += validateEmpty(theForm.from);
     
  if (reason != "") {
    alert("Some fields need correction:\n" + reason);
    return false;
  }
 

  return true;
}
</script>
</head>
<body>

<form name="demo" onSubmit="return validateFormOnSubmit(this)" action="test.htm">
<table summary="Demonstration form">
  <tbody>
  <tr>
    <td><label for="username">Your user name:</label></td>
    <td><input name="username" size="35" maxlength="50" type="text"></td>
  </tr> 
  <tr>
    <td><label for="pwd">Your password</label></td>
    <td><input name="pwd" size="35" maxlength="25" type="password"></td>
  </tr> 
  <tr>
    <td><label for="email">Your email:</label></td>
    <td><input name="email" size="35" maxlength="30" type="text"></td>
  </tr> 
  <tr>
    <td><label for="phone">Your telephone number:</label></td>
    <td><input name="phone" size="35" maxlength="25" type="text"></td>
  </tr> 
  <tr>
    <td>
        <label for="from">Where are you :</label></td>
    <td><input name="from" size="35" maxlength="50" type="text"></td>
  </tr> 
  <tr>
    <td>&nbsp;</td>
    <td><input name="Submit" value="Send" type="submit" ></td>
    <td>&nbsp;</td>
  </tr>
  </tbody>
</table>
</form>
</body>
</html>
Avatar billede majbom Novice
20. april 2009 - 08:48 #7
www.majbom.com/testarea/exp/872211

vis kilde for at se koden :)
Avatar billede nicolailissau Nybegynder
20. april 2009 - 12:23 #8
#7

Smukt! :D

Men jeg må lige stille lidt spørgsmålstegn?

Jeg har tjekket at det script du har lavet både virker i FF og Chrome.

Men i det her script, virker firstChild.noteValue ikke?:
http://www.lissau.org/test.html
`
Der virker til gengæld innerHTML.

Kan du forklare mig hvordan det kan være?

Mvh Nicolai
Avatar billede olebole Juniormester
20. april 2009 - 12:37 #9
<ole>

HTML i form af strenge giver ikke mening i forbindelse med moderne webkode:

var oCont = document.getElementById("msg1");
var oDv = document.createElement("div");
oDv.style.margin = "10px";
oDv.style.padding = "20px";
oCont.appendChild(oDv);
var oI = document.createElement("i");
oI.appendChild(document.createTextNode("Text"));
oDv.appendChild(oI);

/mvh
</bole>
Avatar billede nicolailissau Nybegynder
20. april 2009 - 12:47 #10
Så der er simpelthen derfor det ikke virker?

Okay, jeg må konkludere at jeg skal læse noget DOM :)

Mange tak for svar!

Hvordan tildeler jeg 30 point til 2 personer? Er det ikke muligt?
Avatar billede majbom Novice
20. april 2009 - 12:48 #11
du kan ikke smide html-tags ind i en div på den måde, de skal oprettes og tilføjes til div'en hver for sig:

oNyDiv = document.createElement('div'); //opretter en div
oNyDiv.style.margin = '10px'; //æstter margin
oNyDiv.style.padding = '20px'; //sætter padding
oNyDiv.style.fontStyle = 'italic'; //sætter kursiv

oText = document.createTextNode('Text'); //opretter textnode, med teksten "Text"

oNyDiv.appendChild(oText); //tilføjer textnode "oText" til oNyDiv
document.getElementById('msg1').appendChild(oNyDiv); //tilføjer div'en oNyDiv til div'en "msg1"

det er mere "besværligt" at gøre detpå denne måde, men det er den korrekte måde at gøre det på.

innerHTML har aldrig været en standard og bør derfor ikke bruges nogle steder.
Avatar billede majbom Novice
20. april 2009 - 12:49 #12
damn der var jeg for langsom ole :)

og fandt lige et parfejl, men gå efter ole eksepmel, så går det aldrig helt galt ;)
Avatar billede majbom Novice
20. april 2009 - 12:53 #13
-> nikolai - du kan forhøje antallet af point i spørgsmålet til højre oppe i toppen. derefter accepterer du de svar du mener har hjulpet dig /svaret på dine spørgsmål, så deler den selv ligeligt
Avatar billede olebole Juniormester
20. april 2009 - 12:55 #14
Jeg springer over i denne omgang. Det er splazz, der har taget 'slæbet', og de par småfejl, han lavede i sidste indlæg, ville han sagtens kunne rette  ;o)
Avatar billede nicolailissau Nybegynder
21. april 2009 - 19:53 #15
Ole:

Okay, men tak for dit indlæg alligevel :)

Splazz:

Jeg kan ikke finde noget sted at redigere i antallet af point?
Avatar billede majbom Novice
21. april 2009 - 20:05 #16
nej det kan jeg da godt se, det var der bare på den gamle exp.dk

men vi deler da bare de point du har sat af, det er jo ikke det det handler om :)
Avatar billede nicolailissau Nybegynder
21. april 2009 - 20:16 #17
Okay. Mange tak for besvarelserne. Jeg må smide nogle flere point i puljen næste gang :)

Mvh
Nicolai
Avatar billede majbom Novice
21. april 2009 - 20:21 #18
velbekomme, 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