Avatar billede lund_dk Praktikant
19. maj 2007 - 15:41 Der er 13 kommentarer og
2 løsninger

Validering submitter, men må den ikke

Har denne kode, hvor jeg validerer en form..

Koden virker, hvis der er checkbokse der ikke er valg, fortæller mig den det.

Men når jeg klikker OK, submitter den alligevel..

hvorfor?



<script type="text/javascript">
<!-- Dette script og mange flere -->
<!-- findes hos http://www.html.dk -->
<!-- Start

function validering()
  {
  error = 0;



  if(!((document.forms[0].spm5[0].checked) 
    || (document.forms[0].spm5[1].checked)) && (error==0)) 
  {       
    alert('Udfyld venligst spørgsmålet\nHvor er du opereret?');
    error = 1;       
  }           


  if(!((document.forms[0].spm6[0].checked) 
    || (document.forms[0].spm6[1].checked)) && (error==0)) 
  {       
    alert('Udfyld venligst spørgsmålet\nHvad var dine forventninger til din operation?');
    error = 1;       
  }           


  if(!((document.forms[0].spm7[0].checked) 
    || (document.forms[0].spm7[1].checked)) && (error==0)) 
  {       
    alert('Udfyld venligst spørgsmålet\nHvor længe havde du overvejet din brystoperation før den blrev foretaget?');
    error = 1;       
  }           


  if(!((document.forms[0].spm8[0].checked) 
    || (document.forms[0].spm8[1].checked)) && (error==0)) 
  {       
    alert('Udfyld venligst spørgsmålet\nHvorfor har du gennemgået en brystoperation?');
    error = 1;       
  }           


  if(!((document.forms[0].spm9[0].checked) 
    || (document.forms[0].spm9[1].checked)) && (error==0)) 
  {       
    alert('Udfyld venligst spørgsmålet\nHar operationsforløbet levet op til dine forventninger?');
    error = 1;       
  }           


  if(!((document.forms[0].spm10[0].checked) 
    || (document.forms[0].spm10[1].checked)) && (error==0)) 
  {       
    alert('Udfyld venligst spørgsmålet\nHar resultet levet op til dine forventninger?');
    error = 1;       
  }           


  if(!((document.forms[0].spm11[0].checked) 
    || (document.forms[0].spm11[1].checked)) && (error==0)) 
  {       
    alert('Udfyld venligst spørgsmålet\nHar du oplevet komplikationer i forbindelse med din operation?');
    error = 1;       
  }           


  if(error == 0)
  document.forms[0].submit();   
  }

// Slut -->
</script>
Avatar billede lund_dk Praktikant
19. maj 2007 - 15:44 #1
forresten det er radio felter, ikke checkbox
Avatar billede 0xffff Nybegynder
19. maj 2007 - 15:56 #2
if(!((document.forms[0].spm11[0].checked) 
    || (document.forms[0].spm11[1].checked)) && (error==0)) 
  {       

Jeg vil tro det er din operator precedence. && og || binder venstre til højre. Dvs. at din sætning vil blive evalueret som (xxx && yyy) || zzz.

Og det ser for mig ud til at det du vil have det evalueret som er (xxx) && (yyy || zzz).

Derfor vil jeg tro at et paranteser vil gøre tricket.
Avatar billede roenving Novice
19. maj 2007 - 16:00 #3
Hrm, syndt at html.dks tåbelige script er tilgængelig på indernettet, det burde være skrottet for mindst 10 år siden ...

Prøv i stedet:

<form ... onsubmit="return validering(this);">

-- og så bliver scriptet adskilligt simplere:

<script type="text/javascript">
function validering(f){
  if(!f.spm5[0].checked || !f.spm5[1].checked){       
    alert('Udfyld venligst spørgsmålet\nHvor er du opereret?');
    f.spm5[0].focus();
    return false;
  }
  if(!f.spm6[0].checked || !f.spm6[1].checked){       
    alert('Udfyld venligst spørgsmålet\nHvad var dine forventninger til din operation?');
    f.spm6[0].focus();
    return false;
  }

//Osv. osv.

  return true;
</script>
Avatar billede lund_dk Praktikant
19. maj 2007 - 16:16 #4
Ih hvor lækkert.. virker :)

Men da, det er da tåbeligt de har et script liggende som ikke virker helt..

Smid et svar :-)
Avatar billede lund_dk Praktikant
19. maj 2007 - 16:16 #5
roenving altså :)
Avatar billede roenving Novice
19. maj 2007 - 16:23 #6
Velbekomme '-)

-- desværre er erfaringen, at html.dk _ikke_ vil lave om på ting, de har liggende, og normalt vil selv den tåbelige metode faktisk virke ...

-- tilgangen med at løbe alle felter igennem har faktisk sin berettigelse, men i html.dks udgave er den bare rent tåbelig ,-(

-- den er kun god, hvis man forventer, at brugere i et meget stort skema kan lave et par fejl, og derfor vil give en samlet oversigt over problemerne, men i det viste løber den jo faktisk alle felter igennem før den checker om der er grund til at gå videre, med den nye udgave vil scriptet stoppe umiddelbart efter den første fejl og markere det !-)
Avatar billede lund_dk Praktikant
19. maj 2007 - 16:45 #7
Fik lige test en ekstra gang..
selvom jeg faktisk checker en af, siger den stadig at pågældende ikke er valgt..

Kan du se hvorfor?

Mit rå script..




function validering(f){


<%
Set rsSpg= Conn.Execute("SELECT * FROM AfstemningSporgsmaal where afstemningid = " & rs("id") & "")
Do While Not rsSpg.EOF
%>

  if(!f.spm<%=rsSpg("id")%>[0].checked || !f.spm<%=rsSpg("id")%>[1].checked){       
    alert('Udfyld venligst spørgsmålet:\n\nHvor er du opereret?');
    f.spm<%=rsSpg("id")%>[0].focus();
    return false;
  }
<%
rsSpg.MoveNext
Loop
rsSpg. close
set rsSpg= Nothing
%>

if (!f.email.value.match(/^[a-z0-9_\.-]+@[a-z0-9_\.-]+\.\w{2,3}$/i)) {
alert("Din email er ikke indtastet korrekt!");
f.email.focus();
return false;
}

  return true;
  }
Avatar billede lund_dk Praktikant
19. maj 2007 - 16:47 #8
ups..
dette



function validering(f){


<%
Set rsSpg= Conn.Execute("SELECT * FROM AfstemningSporgsmaal where afstemningid = " & rs("id") & "")
Do While Not rsSpg.EOF
%>

  if(!f.spm<%=rsSpg("id")%>[0].checked || !f.spm<%=rsSpg("id")%>[1].checked){       
    alert('<%=rsSpg("sporgsmaal")%>');
    f.spm<%=rsSpg("id")%>[0].focus();
    return false;
  }
<%
rsSpg.MoveNext
Loop
rsSpg. close
set rsSpg= Nothing
%>

if (!f.email.value.match(/^[a-z0-9_\.-]+@[a-z0-9_\.-]+\.\w{2,3}$/i)) {
alert("Din email er ikke indtastet korrekt!");
f.email.focus();
return false;
}

  return true;
  }
Avatar billede roenving Novice
19. maj 2007 - 17:00 #9
Argh, den klassiske i at negere logiske udtryk:

  if(!f.spm6[0].checked && !f.spm6[1].checked){

-- i øvrigt tester du email-adressen mere, end det faktisk er tilladt, da ingen anden end hjemmeserveren må lave test på noget, der står foran @-tegnet efter den gældende standard (rfc2821), og der findes f.eks. også et tld, der hedder .museum, så f.eks.

if (!f.email.value.match(/^.*?@[\w\.-]+\.[a-z]{2,6}$/i)) {
Avatar billede roenving Novice
19. maj 2007 - 17:11 #10
I øvrigt har 0xffff ret i sine betragtninger om operator-præcedens

a || b && c er det samme som a || ( b && c ), da && har højere 'rang' end || ...

-- selvom det nu ikke er nødvendigt er det nok meget rart at være opmærksom på, at en ting skal skrives ( a || b ) && c, hvis de to eller-ting skal hænge sammen !-)
Avatar billede lund_dk Praktikant
19. maj 2007 - 17:42 #11
Det virker stadig ikke helt :(

tager jeg og submitter formen uden at have valgt noget, får jeg af vide spm5 skal udfyldes..

Udfylder jeg spm5, og submitter, så kan jeg submitte formen, hvor den burde komme frem og advare med de øvrige spm.

Hvad gør jeg mon galt?



function validering(f){




  if(!f.spm5[0].checked && !f.spm5[1].checked){
 
    alert('Hvor er du opereret?');
    f.spm5[0].focus();
    return false;
  }


  if(!f.spm6[0].checked && !f.spm6[1].checked){
 
    alert('Hvad var dine forventninger til din operation?');
    f.spm6[0].focus();
    return false;
  }


  if(!f.spm7[0].checked && !f.spm7[1].checked){
 
    alert('Hvor længe havde du overvejet din brystoperation før den blrev foretaget?');
    f.spm7[0].focus();
    return false;
  }


  if(!f.spm8[0].checked && !f.spm8[1].checked){
 
    alert('Hvorfor har du gennemgået en brystoperation?');
    f.spm8[0].focus();
    return false;
  }


  if(!f.spm9[0].checked && !f.spm9[1].checked){
 
    alert('Har operationsforløbet levet op til dine forventninger?');
    f.spm9[0].focus();
    return false;
  }


  if(!f.spm10[0].checked && !f.spm10[1].checked){
 
    alert('Har resultet levet op til dine forventninger?');
    f.spm10[0].focus();
    return false;
  }


  if(!f.spm11[0].checked && !f.spm11[1].checked){
 
    alert('Har du oplevet komplikationer i forbindelse med din operation?');
    f.spm11[0].focus();
    return false;
  }


if (!f.email.value.match(/^[a-z0-9_\.-]+@[a-z0-9_\.-]+\.\w{2,3}$/i)) {
alert("Din email er ikke indtastet korrekt!");
f.email.focus();
return false;
}

  return true;
  }
Avatar billede lund_dk Praktikant
20. maj 2007 - 10:48 #12
kan du ikke hjælpe ?

se evt www.test.brystplastik.dk/?S=Sporgeskema
Avatar billede lund_dk Praktikant
20. maj 2007 - 11:15 #13
Jeg lukker

fandt andet script på nettetjeg har brugt i stedet
Avatar billede lund_dk Praktikant
20. maj 2007 - 11:15 #14
function formNotComplete(msg)
{
    alert("Du mangler at udfylde:\n\n" + msg);
    return false;
}

function isGroupChecked(g)
{
    var index = 0;
    var isChecked = false;
    while(!isChecked && index<g.length)
    {
        if(g[index].checked)
            isChecked = true;
        else
            index++;
    }
    return isChecked;
}

function check(f)
{
<%
Set rsSpg= Conn.Execute("SELECT * FROM AfstemningSporgsmaal where afstemningid = " & rs("id") & "")
Do While Not rsSpg.EOF
%>

    if(!isGroupChecked(f.spm<%=rsSpg("id")%>))
      return formNotComplete("<%=rsSpg("sporgsmaal")%>");
<%
rsSpg.MoveNext
Loop
rsSpg. close
set rsSpg= Nothing
%>


if (!f.email.value.match(/^[a-z0-9_\.-]+@[a-z0-9_\.-]+\.\w{2,3}$/i)) {
alert("Din email er ikke indtastet korrekt!");
f.email.focus();
return false;
}


    return true;
}
Avatar billede roenving Novice
20. maj 2007 - 12:51 #15
-- husk at lave dine email-validering om !-)
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