Avatar billede lordnelson Seniormester
29. september 2012 - 09:00 Der er 41 kommentarer og
1 løsning

Validering igen

Har nok været oppe flere gange, men kan ikke få det til at funke:
Her denne kode som VIRKER!!

function checkform(thisform) {
// startv?rdier
strerror = 'der opstod følgende fejl:\n\n';
interror = 0;
for(i=1; i <= <%=request("antal")%>; i++)
//check e-mail nyhedsbrev, er den tom
if (thisform.elements["stole_"+i].value == "")
{
strerror = strerror + '- Stol' + i +' feltet er tomt\n'
interror = 1;
thisform.elements["stole_"+i].focus();
}

if (interror == 1) {
alert(strerror)
return false;
}

}

Kan en hjælpe med også at se om feltet er et tal
Eller rettere Feltet må kun være et hel tal
TAk
Avatar billede softspot Forsker
29. september 2012 - 09:23 #1
Prøv med dette:

function checkform(thisform) {
  // startværdier
  var strerror = 'der opstod følgende fejl:\n\n',
      interror = 0,
      reNumber = /^\d+$/g;

  for(i=1; i <= <%=request("antal")%>; i++) {
    var elm = thisform.elements["stole_" + i];
    //check e-mail nyhedsbrev, er den tom
    if (elm.value == "") {
      strerror = strerror + '- Stol' + i +' feltet er tomt\n'
      interror = 1;
      elm.focus();
    }

    if(!reNumber.test(elm.value)) {
      strerror = strerror + '- Stol' + i +' feltet er ikke et tal\n'
      interror = 1;
      elm.focus();
    }
  }

  if (interror == 1) {
    alert(strerror)
    return false;
  }
}
Avatar billede lordnelson Seniormester
29. september 2012 - 12:40 #2
Har prøvet
prøver med et felt med tekst feks. nr 6
Så får jeg at vide at
2 - 4 - 6 8 -9 -10
ikke er et nummer
Avatar billede lordnelson Seniormester
29. september 2012 - 12:42 #3
Undskyld det er kun
2-4-6-8-10 Altså alle lige numre der melder fejl
Avatar billede softspot Forsker
29. september 2012 - 13:03 #4
Hvordan ser din formular ud?

Reglen tolererer ikke mellemrum nogen steder ifm. taller (hverken før, efter eller imellem tallene). Hvordan ser dit input HELT PRÆCIST ud?
Avatar billede softspot Forsker
29. september 2012 - 13:04 #5
"taller"!? Det hedder vist bare tal :-)
Avatar billede lordnelson Seniormester
29. september 2012 - 14:42 #6
Mit input
<input name="stole_<%=i%>"  id="stole_<%=i%>" type="text"  size="4" align="right" >
Avatar billede softspot Forsker
29. september 2012 - 15:35 #7
Kan du ikke prøve at vise hele den kode/html der genererer formularen? Jeg synes det er lidt svært, at få ret meget ud af et input-element...
Avatar billede lordnelson Seniormester
29. september 2012 - 16:04 #8
Har skåret den ned til dette:

<form action="opretstole.asp" method="post"  name="form2" onsubmit="return checkform(this);">">
 

<table width="800" border="0" align="center">

  <td>

  <%for i = 1 to request("antal")%>
  <tr>
  <td>Antal Stole for bord  nr <%=i%>  <input name="stole_<%=i%>"  id="stole_<%=i%>" type="text"  size="4" align="right" > 
  </td>
  </tr>
  <% next
  %>
  <tr><td><input type="submit" name="Nr10" id="Nr10" value="Opret rummet"></td>
  </tr>
</table>
</form>
Avatar billede lordnelson Seniormester
29. september 2012 - 16:08 #9
Ville lige skrive at validering af tomme felter virker perfect i coden
Avatar billede softspot Forsker
29. september 2012 - 16:10 #10
Og hvordan ser dit input ud (dvs. den tekst du indtaster i feltet der fejler)? Du er nok nød til at sætte teksten i anførselstegn for at illustrere evt. mellemrum og andre tegn tydeligt. F.eks. " 6" eller "nr 5".
Avatar billede lordnelson Seniormester
29. september 2012 - 16:20 #11
skriver bare et 2 tal i alle felter
så fejler den på alle lige felter ikke ulige
Avatar billede lordnelson Seniormester
29. september 2012 - 16:22 #12
Måske bedre forklaret med at min løkke laver 4 input felter
her skriver jeg et 2 tal i alle fire
så fejler den på felt Stole_2 og felt stol_4
Avatar billede lordnelson Seniormester
29. september 2012 - 16:32 #13
Hvis jeg skriver resulatet ud med document.write i fejl skriver den [object HTMLInputElement]
Avatar billede softspot Forsker
29. september 2012 - 16:40 #14
Prøv lige med denne kode i stedet:

function checkform(thisform) {
  // startværdier
  var strerror = 'der opstod følgende fejl:\n\n',
      interror = 0,
      reNumber = /^\d+$/g;

  for(i=1; i <= <%=request("antal")%>; i++) {
    reNumber.lastIndex = 0;
    var elm = thisform.elements["stole_" + i];

    //check e-mail nyhedsbrev, er den tom
    if (elm.value == "") {
      strerror = strerror + '- Stol' + i +' feltet er tomt\n';
      interror = 1;
      elm.focus();
    }

    if(!reNumber.test(elm.value)) {
      strerror = strerror + '- Stol' + i +' feltet er ikke et tal\n';
      interror = 1;
      elm.focus();
    }
  }

  if (interror == 1) {
    alert(strerror);
    return false;
  }
}


Jeg tror det er fordi det regulære udtryk genbruges fejlen opstår. LastIndex skal nulstilles hver gang, så testen starter forfra i den nye streng.
Avatar billede lordnelson Seniormester
29. september 2012 - 16:47 #15
yes yes smukt TAk
Ville meget gerne give flere point
men tror ikke jeg kan ????????
Læg endelig et svar
Avatar billede softspot Forsker
29. september 2012 - 16:53 #16
Velbekomme :-)
Avatar billede lordnelson Seniormester
29. september 2012 - 17:37 #17
laver lige en ny tråd for glemte det skal være heltal
Avatar billede softspot Forsker
29. september 2012 - 17:49 #18
Det er det vel også...?
Avatar billede lordnelson Seniormester
29. september 2012 - 19:19 #19
nå ja ligetal mente jeg :)
Avatar billede softspot Forsker
29. september 2012 - 19:23 #20
Prøv med:

function checkform(thisform) {
  // startværdier
  var strerror = 'der opstod følgende fejl:\n\n',
      interror = 0,
      reNumber = /^\d*[02468]$/g;

  for(i=1; i <= <%=request("antal")%>; i++) {
    reNumber.lastIndex = 0;
    var elm = thisform.elements["stole_" + i];

    //check e-mail nyhedsbrev, er den tom
    if (elm.value == "") {
      strerror = strerror + '- Stol' + i +' feltet er tomt\n';
      interror = 1;
      elm.focus();
    }

    if(!reNumber.test(elm.value)) {
      strerror = strerror + '- Stol' + i +' feltet er ikke et tal\n';
      interror = 1;
      elm.focus();
    }
  }

  if (interror == 1) {
    alert(strerror);
    return false;
  }
}
Avatar billede lordnelson Seniormester
29. september 2012 - 19:33 #21
nice smid lige et svar i validering tal (ny en )
Avatar billede softspot Forsker
29. september 2012 - 19:38 #22
Ikke nødvendigt. Bare giv point i denne tråd (hvor jeg allerede har lagt svar) og tag selv point i den anden tråd.
Avatar billede olebole Juniormester
29. september 2012 - 20:48 #23
<ole>

Årrhhhh ... jeg ville ellers så gerne bestille 12 stole  :o|

/mvh
</bole>
Avatar billede olebole Juniormester
29. september 2012 - 20:53 #24
Man kunne også skrive:

function checkform(thisform) {
    // startværdier
    var strerror = 'der opstod følgende fejl:\n\n',
    interror = 0,
    reNumber = /^\d+$/g,
    elm, val;
   
    for(i=1; i <= <%=request("antal")%>; i++) {
        reNumber.lastIndex = 0;
        elm = thisform.elements["stole_" + i];
        val = elm.value;
       
        //check e-mail nyhedsbrev, er den tom
        if (val == "") {
            strerror = strerror + '- Stol' + i +' feltet er tomt\n';
            interror = 1;
            elm.focus();
        }
       
        if(!reNumber.test(val) && (val*1)%2!=0) {
            strerror = strerror + '- Stol' + i +' feltet er ikke et tal\n';
            interror = 1;
            elm.focus();
        }
    }
   
    if (interror == 1) {
        alert(strerror);
        return false;
    }
}
Avatar billede lordnelson Seniormester
29. september 2012 - 21:03 #25
lol Ole
Så må du lige smide et svar til Soft :)
Avatar billede softspot Forsker
29. september 2012 - 21:28 #26
#23 >> det kan du vel også godt? :-)
Avatar billede olebole Juniormester
29. september 2012 - 21:45 #27
Dooohhhh ... måske, jeg hellere skulle købe 12 par briller!  *D
Avatar billede erikjacobsen Ekspert
29. september 2012 - 23:36 #28
Undskyld at en gammel krakilsk, gråhåret mandsperson blander lidt malurt i bægeret (hvordan det så end smager), men ...

  En valideringsfunktion skal (i betydningen skal)
  aflevere enten false eller true som funktionsresultat.

I alle eksemplerne ovenfor afleveres kun false, eller ingenting, og det vil ikke virke generelt (dvs. i alle browsere, version osv).

Ole er velkommen til at grave i hans ufattelige viden om Javascript, og pege på den lille bemærkning i dokumentationen, der sig at jeg tager fejl (og så skylder jeg ham en discountøl fra Tyskland)
Avatar billede lordnelson Seniormester
29. september 2012 - 23:52 #29
Ville jo gerne gi point Soft !!!!!!!!!!!
Tak for input erik , har prøvet den i de gængse browsere , og virker ellers fint
Avatar billede softspot Forsker
30. september 2012 - 00:21 #30
#29 >> hvad afholder dig fra at give point? Du har et svar, så nu skal du vel bare tildele point... eller hvad?
Avatar billede olebole Juniormester
30. september 2012 - 00:42 #31
@Erik: Jeg må bede dig grave i din samling af gamle browserversioner og finde den, der ikke submitter denne form:

<form action="" onsubmit="return void(0)">

- og det samme gælder såmænd i en onclick-handler på et link.

Jeg forstår sådan set godt, hvad du mener, men sådan forholder virkeligheden sig ikke. Når en handler sættes som attribut på et HTML-element, skal den returnere eksplicit false for at stoppe event'en.

Nu er det så heldigt, at min viden ikke begrænser sig til JavaScript. Derfor ved jeg også, at hvis der skal findes dokumentation på fænomenet, er det ikke under JavaScript, men under DOM-specifikationerne - evt. Script/DOM-bindingerne. Om - og i så fald, hvor - det er omtalt, ved jeg dog ikke  =)

Og ehhhh, Erik ... så er der lige den lille detalje, at hovmod nomalt ikke er noget, jeg veksler til discountøl. Det koster trappist øl - og i overmål koster det Laphroaig islay whisky ... i overmål!  *D
Avatar billede lordnelson Seniormester
30. september 2012 - 08:07 #32
tak
Avatar billede lordnelson Seniormester
30. september 2012 - 08:08 #33
Undskyld soft troede jeg havde gjort det SORRY
Avatar billede lordnelson Seniormester
30. september 2012 - 08:11 #34
Og hej Ole -- He he som sædvanlig i hopla
Jeg giver en frankfurter og en rød sodavand , det er bedre end discount øl
Avatar billede erikjacobsen Ekspert
30. september 2012 - 09:25 #35
Indtil videre er optjeningen kun en halv Cola Light (discount fra Rema 1000), for den interessante diskussion.

Det jeg egentlig spurgte dig om, Ole: Hvor står der i officielle papirer, at det bør virke som du beskriver.

Så kan det være jeg må revidere mit standpunkt.

Din eksempelkode virker bestemt som du skriver. Jeg har ikke adgang til gamle browsere som sådan, men kan måske fyre op under en Windows 3.11, og se hvad der sker.
Avatar billede erikjacobsen Ekspert
30. september 2012 - 09:41 #36
Jeg graver selv lidt, som tiden nu tillader, og for HTML3 (draft) fra 1996 står der i http://www.w3.org/TR/WD-script-960208.html

"OnSubmit
    A submit event occurs when a user submits a form. JavaScript
    requires you to return true in the event handler to allow
    the form to be submitted; return false to prevent the form
    from being submitted. This attribute is used only with
    the FORM element."
Avatar billede olebole Juniormester
30. september 2012 - 13:58 #37
Ja, det er svært at finde relevante tekster om emnet, som ikke er skrevet i runer. Faktisk tror jeg, det er en af de mange ting, som ikke er defineret i rekommendationerne.

Noget af det nyeste, jeg har fundet er [url=http://lists.w3.org/Archives/Public/public-whatwg-archive/2006Jul/0107.html]denne kommentar af Dean[url], som ret klart understøtter antagelsen om, at kun return===false må cancel'e event'en. Det er nok så officielt, det kan blive  =)

Derudover må jeg minde dig om, at din bombastiske påstand lød:

  "En valideringsfunktion skal (i betydningen skal)
  aflevere enten false eller true som funktionsresultat.

I alle eksemplerne ovenfor afleveres kun false, eller ingenting, og det vil ikke virke generelt (dvs. i alle browsere, version osv)."


Der påhviler således ikke mig nogen bevisbyrde. Jeg mener som sagt ikke, det er eksplicit defineret, så det må være din opgave at fremskaffe bevis for, at hovmodigheden ikke var fejlplaceret  *o)

Desværre tror jeg ikke Laphroaig kan fås i større flasker end én liter  :D
Avatar billede olebole Juniormester
30. september 2012 - 13:59 #38
Al den ny teknik ... jeg prøver lige igen  =)

Noget af det nyeste, jeg har fundet er denne kommentar af Dean, som ret klart understøtter antagelsen om, at kun return===false må cancel'e event'en. Det er nok så officielt, det kan blive  =)
Avatar billede erikjacobsen Ekspert
30. september 2012 - 19:52 #39
Du har helt sikkert forspildt en karriere i det diplomatiske korps, Ole. Eller i reklameverdenen. Eller som politiker (men i disse dage er det jo det samme som reklameverdenen)

Dit link understøtter nemlig fint din antagelse. Men samtidig støtter det min, for det er ikke en officiel documentation af virkemåden. Og jeg synes din erkendelse er helt til ug: "ret klart" ;)

Det er naturligvis korrekt at vi nok ikke finder en gængs browser i dag, hvor det ikke gælder, men det udelukker ikke fremtidige, tidligere, eller nuværende.

Mit horoskop siger at jeg skal være konstruktiv i september måned, så lad mig på den sidste dag i måneden reformulere min lettere bombastiske formulering ovenfor:

  Det kan kraftigt anbefales at lave en "return true", både som
  livrem-og-seler forsikring mod kreative browserudviklere, og
  for at gøre valideringsfunktion anvendelig både i en
  onsubmit-attribut, og direkte i en if-sætning lige før man
  bestemmer sig for at submitte sin form med .submit().

if (void(0)) og if(false) opfører sig nemlig ret ens.

Apropos livrem-og-seler forsikring, så havde min forsikringsmand et sjovt udtryk i ansigtet, da jeg bad om prisen for en tillægsforsikring til dækning af skader i haven forvoldt af løsgående isbjørne. Han mente, efter et stykke tid, at det nok var inkluderet allerede.

PS: Hvis du skaffer 2 stk 1 liter Laphroaig, så skaffer jeg en to liter cola flaske det kan omhældes på. Men jeg forstår nok ikke helt problemet.
Avatar billede olebole Juniormester
30. september 2012 - 20:35 #40
Til gengæld tror jeg, der er gået en stor bankrådgiver tabt i dig - ikke mindst hvis du også kan få flg. tekst til at fremstå som argument for din opfattelse:

When an event handler's Function object is invoked, its call() callback must be invoked with one argument, set to the Event object of the event in question.

The handler's return value must then be processed as follows:
*) If the event type is mouseover
        If the return value is a boolean with the value true, then the event must be canceled.
*) If the event object is a BeforeUnloadEvent object
        If the return value is a string, and the event object's returnValue attribute's value is the empty string, then set the returnValue attribute's value to the return value.
*) Otherwise
        If the return value is a boolean with the value false, then the event must be canceled.

NB: Hvis returværdien er false, skal event'en cancel'es.

Altså: Er returværdien ikke false, skal event'en ikke cancel'es.

Det er ikke 'ret klart'. Det er i forhold til meget andet i rekommendationerne klart som bøhmisk krystal. I hvertfald kan der næppe herske tvivl om fremtidige browseres opførsel på området  =)

Men du må fortsat gerne - ligesom jeg selv gør - sikre dig med både livrem og seler og altid returnere true som default  *o)

Jeg skaffer skam gerne de to flasker - og et girokort på dem  *D
Avatar billede olebole Juniormester
30. september 2012 - 20:39 #41
Ups ... linket  =)
Avatar billede erikjacobsen Ekspert
30. september 2012 - 23:41 #42
Ingen tvivl om at de er blevet bedre til at udtrykke sig klart. I diverse Working Drafts til HTML 5 er der formuleringer som "if the return value is false", som kan opfattes på indtil flere underholdende måder.

Og det er selvfølgelig det man bruger WDs til at opdage.

Pre HTML5 kan være en anden sag, og jeg har ikke de gamle browsere til at undersøge det med. Og en hurtig googling gav heller ikke noget.

Men Ole, du har da fortjent noget bedre end en tysk discountøl. Jeg har sådan set heller ikke flere tilbage.
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