Avatar billede larsen1 Nybegynder
20. juni 2001 - 10:26 Der er 8 kommentarer og
1 løsning

Validering af dynamiske grupper af radiobuttons

Jeg har flere grupper af radiobuttons, som bliver lavet dynamisk fra en database. Hvordan i alverden får jeg valideret at der er foretaget et valg i alle grupper?
Jeg henter et varierende antal spørgsmål fra en database, med op til 5 svarmuligheder på hver. Derfor er det ikke til at vide på forhånd hvor mang der er i sidste ende.

Lidt forkortet, så ser koden således ud: (jeg ved den stadig er lang)

<%@language=vbscript%>
<html>
<head>
<title>Poll</title>
</head>
    <body>
        <center>
            <table width=\"500\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#323241\">
                <tr>
                    <td>
                        <center>
                        <br>
                                Poll
                        </center>
                        <p>
                       
<table width=\"90%\" border=\"0\" cellspacing=\"0\" cellpadding=\"1\" align=\"center\">
  <tr>
    <td align=\"center\"><div class=\"polllille\">
    <form method=\"get\" name=\"frmPollVote\" action=\"update_test.asp\">
      <%
     
dsn = \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath(\"../db/poll.mdb\")

set con = Server.CreateObject(\"ADODB.Connection\")
con.open(dsn)

    sql = \"SELECT * FROM polls ORDER By prioritet\"
    set r = con.execute(sql)
       
if not r.eof then

\'********* LOOP **********
    do while not r.eof

    strPollQuestion = r(\"sporgsmaal\")   

    intPollIDNum = CInt(r(\"poll_id\"))
   
    \'Dim en tæller der identificerer dette spørgsmål
    questioncount = intPollIDNum       
   
       
    \'Loop - op til 5 svarmuligheder
    For intReadInVotesLoopCounter = 1 To 5
        \'Read in the total number of votes cast
        intTotalPollVotes = intTotalPollVotes + CInt(r(\"votes_\" & intReadInVotesLoopCounter & \"\"))
    Next   

    \'Display the HTML for the weekly poll
   
    response.write \"<hr>\"

        Response.Write \"<p>    <table width=\"\"100%\"\" border=\"\"0\"\" cellspacing=\"\"0\"\" cellpadding=\"\"1\"\">\"
        Response.Write \"<p>      <tr>\"
       
        \'vis poll spørgsmål           
    Response.Write \"<p>            <td align=\"\"center\"\" height=\"\"31\"\"><span class=\"\"pollstor\"\">\" & strPollQuestion & \"</span></td>\"
   
    Response.Write \"<p>      </tr>\"
    Response.Write \"<p>    </table>\"   
   
    Response.Write \"<p>      <table width=\"\"250\"\" border=\"\"0\"\" cellspacing=\"\"0\"\" cellpadding=\"\"1\"\" align=\"\"center\"\">\"
        Response.Write \"<tr><td>\"
       
    \'Loop to display each of the selection choices for the poll
    For intSelectionLoopCounter = 1 To 5
       
        \'If there is a Selection choice then display the HTML to show it
        If r(\"valg_\" & intSelectionLoopCounter) <> \"\" Then
           
            \'Display a radio button for the selection choice
            Response.Write \"<p>\" & \"    <input type=\"\"radio\"\" name=\"\"PollVote\" & questioncount & \"\"\" value=\"\"votes_\" & intSelectionLoopCounter & \"\"\">\"
           
            \'Display the selection choice
            Response.Write \"<span class=\"\"polllille\"\">\" & r(\"valg_\" & intSelectionLoopCounter) & \"<br></span>\"
        End If
    Next
       
    Response.Write \"</td></tr></table>\"

\'********* LOOP end **********
        r.movenext
    loop
end if
     
%>
    <p><hr><p>

    <input class=\"button\" type=\"submit\" name=\"Submit\" value=\"Send\"></form>
  </div></td>
  </tr>
</table>
<%

\'Server Objects
r.close
set r = nothing
Con.close
set Con=nothing

%>
<br>
</body>
</html>

Er der nogen der kan regne den ud? Jeg har prøvet alt muligt, men mine begynder-programmeringsevner slår ikke helt til. Den skal validere inden siden bliver submittet. Jeg forestiller mig noget med for hver radiogroup - check at en af dem er valgt, men hvordan det skrives, ved jeg ikke.
Avatar billede jakoba Nybegynder
20. juni 2001 - 11:33 #1
noget i retning af:

<script  >

var testede = \"\";

function validateform ( frm ) {
  testede = \",\";
  for (var i=0; i<frm.elements.length; i++ )
                      // for alle elementer i formen
      if (  frm.elements[i].type == \"radio\"
                      // er det en radioknap?
          && testede.indexOf(\",\"+frm.elements[i].name+\",\")==-1 ) {
                      // og hidtil ubehandlet
        // så checker vi den radioknap
        var knappen = frm.elements[i];
        for (var j=0; j<knappen.length; j++ )
            if ( knappen[j].checked ) break;
        if ( j >= knappen.length ) { // ingen knap valgt. test fails
            alert( \"du skal vælge i hver gruppe.\" );
            knappen[0].focus();  //scroll til første uudfyldte
            return false;
        };
        testede += frm.elements[i].name+\",\";    // husk knappen er testet
      }
  };
  // nu er alle radioknapper testet. test evt andre felter normalt

  return true; // alle testes gik godt.
}; //end validateform( form objekt )

mvh JakobA
Avatar billede jakoba Nybegynder
20. juni 2001 - 11:43 #2
Ups. det du har skrevet er vbscript.
Det jeg har skrevet er javascript.
så funktionen skal ligge i en separat
<script language=\'javascript*>

</script>
container.
Avatar billede jakoba Nybegynder
20. juni 2001 - 11:45 #3
Ups, Ups.
<script language=\'javascript\'>
men den fandt du nok selv :)
Avatar billede larsen1 Nybegynder
20. juni 2001 - 13:19 #4
det lyder fornuftigt - jeg tester lige!
Avatar billede larsen1 Nybegynder
20. juni 2001 - 13:28 #5
Er det korrekt at smide scriptet op i headeren, og så kalde den med onclick=\"validateform( frmPollVote )\"?
Det er ligesomom den ikke kalder på scriptet.
Avatar billede larsen1 Nybegynder
20. juni 2001 - 13:50 #6
Jeg kan fisme ikke hitte hvordan det skal implementeres på siden. 50 X-tra point for at få mit til at fatte det.
Avatar billede jakoba Nybegynder
20. juni 2001 - 21:24 #7
ja du lægger scriptet i head.
scriptet aktiveres med en onsubmit event i <form kommandoen:

    <form method=\"get\" name=\"frmPollVote\" action=\"update_test.asp\"
          onsubmit=\"return validateform()\">

(hvis funktionen så returnerer false bliver data ikke submitted, så brugeren får en chance for at rette)

ingen grund til at sætte points op. 100 er allerede meget.

mvh JakobA
Avatar billede larsen1 Nybegynder
21. juni 2001 - 09:02 #8
Tak - nu virker det. Jeg ku\' ikke finde ud af at tage mine 50 point tilbage, men du har også fortjent dem - det var skønt!
Avatar billede jakoba Nybegynder
21. juni 2001 - 09:19 #9
takker.
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