Avatar billede avminarm Juniormester
04. oktober 2004 - 10:57 Der er 21 kommentarer og
1 løsning

felt validering ved 'tab'

Hej

Nu har jeg ledt og ledt og prøvet en masse forskelligt, men kna ikke rigtig få det til at fungere, så nu starter jeg forfra.

Jeg skal bruge noget javascript til at validere på on et input felt er tomt når man tabber ud af feltet + om det er en gyldig email adresse (format) også når man tabber ud af feltet + f.eks længden af et nummer/text i et input felt (via regex vil jeg tro).

er der en venlig sjæl der vil lave et simpelt eksempel på oven stående - meget gerne med lidt kommentarer til.

OBS - jeg er ikke nogen javascript haj
Avatar billede hulla Novice
04. oktober 2004 - 11:07 #1
Hvis du arbejder i asp.net har du mulighed for at bruge regularexpressions, de virker fremragende og er yderst lette at bruge
Avatar billede fennec Nybegynder
04. oktober 2004 - 11:10 #2
Email tjek:

function CheckMail(checkStr)
{
if(!checkStr.match(/^[\w]{1}[\w\.\-_]*@[\w]{1}[\w\-_\.]*\.[\w]{2,6}$/i))
  return false;
else
  return true;
}

<input ... onBlur="CheckMail(this.value)">
Avatar billede fennec Nybegynder
04. oktober 2004 - 11:17 #3
hulla >>
Bare lige for at nævne det, så behøver man ikke asp.net for at bruge regularexpressions. Det eksistere også i ASP og JavaScript (og mange andre sprog).

Denne har jeg fundet her på E i JavaScript katagorien. Reg Exp er dog stadig sort snak for mig, så spørg mig ikke om hvordan den fungere. Jeg prøver dog på at lære det.
Avatar billede avminarm Juniormester
04. oktober 2004 - 11:21 #4
tak>> det med regex ved jeg godt :o) - jeg leder mere efter en der kan vise mig hvordan man får det til at spille sammen - alt sammen, men jeg kigger lige på det ;o)
Avatar billede avminarm Juniormester
04. oktober 2004 - 11:26 #5
jeg ville gerne forstå dette: onBlur="CheckMail(this.value)"> hvad sker der der mere this og value og kan man altid benytte dette i et hvilket som helst input felt?
Avatar billede fennec Nybegynder
04. oktober 2004 - 11:46 #6
onBlur er den action, som bliver aktiveret når man forlader elementet.

"this" er en pointer/reference til det element du er i. I dette tilfælde kunne du også skrive "document.DinForm.email.value" i stedet for "this.value". "this" svarer altså til "document.DinForm.email". Hvis du f.eks ville ændre alle tjek til at ske når man sender formen kunne du gøre sådan:

<form name="DinForm" .... onSubmit="CheckMail(this.email.value)">

Her svare "this" altså til "document.DinForm". "this" kan altid bruges på inputfelter og alle andre elementer (der er måske undtagelser, men jeg kender ikke nogen). Et eks. med "this" på et DIV element:

<div onclick="this.innerHTML='hejsa'">klik her</div>
Avatar billede avminarm Juniormester
04. oktober 2004 - 11:57 #7
innerHTML - nu bliver du avanceret ;o|, men hvorfor bruger man så ikke bare altid this.value?
Avatar billede fennec Nybegynder
04. oktober 2004 - 12:19 #8
innerHTML er bare kaldet til at ændre alt tekst der står mellem de to div tags.

Nogen gange skal man måske have fat i flere elementer på en gang, eller funktionen skal køres fra et andet element (en knap). F.eks i en regne funktion. Her synes jeg det er nemmere at skrive navnene i funktionen.

function sumAfElementer()
{
  document.EnForm.sum.value = parseInt(document.EnForm.tal1.value) + parseInt(document.EnForm.tal2.value)
}
<form name="EnForm">
<input type="tekst" name="tal1"><br>
<input type="tekst" name="tal2"><br>
<input type="tekst" name="sum"><input type="button" onClick="sumAfElementer()">
</form>

Jeg kan dog godt hente dem ud med "this" men så skal jeg til at "back tracke" for at få fat i de andre elementer. Det ville så være sådan:

function sumAfElementer(strSum, strtal1, strtal2)
{
  strSum.value = parseInt(strtal1) + parseInt(strtal2)
}
//-->
</SCRIPT>
<form name="EnForm">
<input type="tekst" name="tal1"><br>
<input type="tekst" name="tal2"><br>
<input type="tekst" name="sum"><input type="button" value="sum" onClick="sumAfElementer(this.form.sum, this.form.tal1.value, this.form.tal2.value)">
</form>

Der synes jeg også det første eks er mere overskulig.
Avatar billede avminarm Juniormester
04. oktober 2004 - 13:21 #9
takker for dine vise ord kan du så få det her jeg har bikset sammen til at virke?

og hvad med select bokse - hvordan gør man det også  med onBlur?

hvd hvis man vil tjekke om et felt opfylder to betingelser f.eks. numerisk og ikke tomt - kan man gøre sådan her: onBlur="isNumeric(this.value); isEmpty(this.value)">

det er faktisk kun din funktion jeg kan få til at virke :o)

<script>
function CheckMail(checkStr) {
  if(!checkStr.match(/^[\w]{1}[\w\.\-_]*@[\w]{1}[\w\-_\.]*\.[\w]{2,6}$/i)) {
    alert("Forkert email adresse!");
  } else {
    return true;
  }
}

function IsEmpty(checkStr) {
  if ((checkStr.value.length==0) || (checkStr.value==null)) {
      alert("Feltet må ikke vær tomt!");
  } else {
      return false;
  }
}   

function IsNumeric(checkStr) {
  var ValidChars = "0123456789.";
  var IsNumber=true;
  var Char;


  for (i = 0; i < sText.length && IsNumber == true; i++)  {
      Char = checkStr.charAt(i);
      if (ValidChars.indexOf(Char) == -1) {
        IsNumber = false;
        // ALERT HER??
        }
      }
  return IsNumber;

}

function AntalTegn(max, min){
// på bar bund
}

</script>

<form>
<input type"text" name="test" onBlur="CheckMail(this.value)">
<input type"text" name="test" onBlur="IsEmpty(this.value)"> <-virker ikke
<input type"text" name="test">
</form>
Avatar billede fennec Nybegynder
04. oktober 2004 - 13:30 #10
du var ellers tæt på :o)

function IsEmpty(checkStr) {
  if (checkStr.length==0 || checkStr==null) {
      alert("Feltet må ikke vær tomt!");
  } else {
      return false;
  }
}

du sender allerede "this.value" over, så du skal ikke have ".value" med i funktionen. Det skulle det have været hvis du kun sendte "this" over.
Avatar billede fennec Nybegynder
04. oktober 2004 - 13:35 #11
... og JavaScript har en funktion til at tjekke om det er et tal.

function IsNumeric(checkStr) {
  if (isNaN(checkStr))
  {
    alert('Skal være tal')
    return false;
  }
  else
  {
    return true;
  }
}
Avatar billede avminarm Juniormester
04. oktober 2004 - 13:37 #12
ok - jeg bliver klog ;O)

hvad med IsNumeric og AntalTegn?
Avatar billede avminarm Juniormester
04. oktober 2004 - 13:39 #13
det med tal det er smart - den anden var en funk jeg har fundet her på E
Avatar billede fennec Nybegynder
04. oktober 2004 - 14:00 #14
Går ud fra det er et tjek på at teksten skal indeholde xx antal tegn.

function AntalTegn(checkStr, min, max){
  if (checkStr.length>=min && checkStr.length<=max)
  {
    return true;
  }
  else
  {
    alert('Skal være mellem '+ min +' og '+ max +' tegn lang')
    return false;
  }
}

<input type"text" name="test" onBlur="AntalTegn(this.value,4,10)">

min og max kunne også sættes i funktionen hvis det er det samme antal der skal tjekkes for hver gang.

function AntalTegn(checkStr){
  min = 4
  max = 10
  ...

<input type"text" name="test" onBlur="AntalTegn(this.value)">
Avatar billede avminarm Juniormester
04. oktober 2004 - 14:10 #15
lige netop, så lige en sidste:

hvis nu jeg vil tjekke et inputfelt for om det er numerisk + mellem 4 og 8 tal - kan jeg tjekke det sådan her:
onBlur="AntalTegn(this.value,4,10); IsNumeric(this.value)">
Avatar billede avminarm Juniormester
04. oktober 2004 - 14:15 #16
skal der ikke være ; efter en alert()?
Avatar billede fennec Nybegynder
04. oktober 2004 - 14:21 #17
1. Jeps, det kan du.
2. jo, der skal helst være ; efter, men den kan godt finde ud af de alligevel. Det er dog bedst at have dem med. Min forglemmelse

Det slog mig lige, at det måske var en ide at ændre din overførsel, så du kun overfører "this". På den måde kan du nemlig sætte fokus/curseren tilbage til feltet hvor fejlen opstod. Du skal så til at bruge checkStr.value i dine funktioner, men det er mere brugervenligt.

function IsNumeric(checkStr) {
  if (isNaN(checkStr.value))
  {
    alert('Skal være tal');
    checkStr.focus();
    return false;
  }
  else
  {
    return true;
  }
}
function AntalTegn(checkStr, min, max){
  if (checkStr.value.length>=min && checkStr.value.length<=max)
  {
    return true;
  }
  else
  {
    alert('Skal være mellem '+ min +' og '+ max +' tegn lang');
    checkStr.focus();
    return false;
  }
}

<input type"text" name="test" onBlur="IsNumeric(this);AntalTegn(this,4,10);">
Avatar billede avminarm Juniormester
04. oktober 2004 - 14:31 #18
nu har jeg forsøgt at sætte fokus på empty og checkmail, men jeg har fået lavet et eller andet galt + Smid lige et svar - du har været en kanon hjælp - jeg er tilbage igen i aften og accepteter - skal til møde nu:

<script>
function CheckMail(checkStr) {
  if(!checkStr.match(/^[\w]{1}[\w\.\-_]*@[\w]{1}[\w\-_\.]*\.[\w]{2,6}$/i)) {
    alert("Forkert email adresse!");
    checkStr.focus();
    return false;
  } else {
    return true;
  }
}

function IsEmpty(checkStr) {
  if ((checkStr.length==0) || (checkStr==null)) {
      alert("Feltet må ikke vær tomt!");
      checkStr.focus();
  } else {
      return false;
  }
}   

function IsNumeric(checkStr) {
  if (isNaN(checkStr.value))
  {
    alert('Skal være tal');
    checkStr.focus();
    return false;
  }
  else
  {
    return true;
  }
}
function AntalTegn(checkStr, min, max){
  if (checkStr.value.length>=min && checkStr.value.length<=max)
  {
    return true;
  }
  else
  {
    alert('Skal være mellem '+ min +' og '+ max +' tegn lang');
    checkStr.focus();
    return false;
  }
}


</script>

<form>
<input type"text" name="test" onBlur="CheckMail(this)"> mail <br>
<input type"text" name="test" onBlur="IsEmpty(this)"> tom <br>
<input type"text" name="test" onBlur="AntalTegn(this,4,10)"> mellem 4 og 10 tegn<br>
<input type"text" name="test" onBlur="IsNumeric(this)"> Numerisk <br>
<input type"text" name="test" onBlur="IsNumeric(this);AntalTegn(this,4,10);"> numerisk og mellem 4 og 10 <br>
<input type"text" name="test">
</form>
Avatar billede fennec Nybegynder
04. oktober 2004 - 14:41 #19
Der skulle lige en ".value" med nu det er elementet der blev overført og ikke kun værdien:

function CheckMail(checkStr) {
  if(!checkStr.value.match(/^[\w]{1}[\w\.\-_]*@[\w]{1}[\w\-_\.]*\.[\w]{2,6}$/i)) {
    alert("Forkert email adresse!");
    checkStr.focus();
    return false;
  } else {
    return true;
  }
}

function IsEmpty(checkStr) {
  if ((checkStr.value.length==0) || (checkStr.value==null)) {
      alert("Feltet må ikke vær tomt!");
      checkStr.focus();
  } else {
      return false;
  }
}
Avatar billede fennec Nybegynder
04. oktober 2004 - 14:41 #20
.o) <-- One Eyed Jack
Avatar billede roenving Novice
04. oktober 2004 - 17:39 #21
-- og så er der en masse overflødigt i den måde, regexpen checker for det første tegn er et 'ord'-tegn:

  if(!checkStr.value.match(/^\w[\w\.\-_]*@\w[\w\-_\.]*\.\w{2,6}$/i)) {
Avatar billede avminarm Juniormester
04. oktober 2004 - 20:41 #22
roenving>> tak for input - de der regexp er lidt "krydrede"

fennec>> tusind tak for hjælpen
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