28. maj 2002 - 22:38Der er
16 kommentarer og 1 løsning
Tjek afkrydsning af 16 regler...
På http://bytte.startlinket.dk/index.php?funk=accepter har jeg 16 regler, som folk skal læse og acceptere, før at de kan fortsætte. Men det kan ikke kontroleres at de læser dem, derfor har jeg sat en tid på, så de mindste skal være 15 sek. om at læse dem. Men er det ikke muligt at lave en lille checkboks ved hver regel, som folk skal afkrydse for at kunne fortsætte. Så skal der være noget JavaScript validering, som popper om med en besked, hvis alle sammen ikke er afkrydset.
Problemet er jo at folk bare skider på reglerne og accepterer dem, uden at have læst dem. Det kan jeg tydeligt se, da mange bruger FastFreeway, selvom det står i reglerne, at det må man ikke...
Men jeg kan godt se at det vil blive irriterende...
Der skal selvfølgelig så laves et par ændringer så den tæller en variabel op hver gang den finder en checkbox der er markeret og til sidst skal du så lave et tjek på om den variabel er lig med 16 ;)
Her er en der virker. <html> <head> <script type="text/javascript"> antal = 0; antalspoergsmaal = 16; tid = 0; antalsekundertilhver = 16; function timer(){ tid ++; setTimeout("timer()", 1000); } function doit(el){ if (tid > antalsekundertilhver && antal < antalspoergsmaal){ for (i = 0; i < document.all.length; i ++){ if (document.all[i].tagName == "TR" && document.all[i].style.display == "none"){ document.all[i].style.display = "block"; i = document.all.length; } } }else{ alert("den har du vist ikke læst ordentligt"); el.checked = false; } antal ++ tid = 0; timer(); }
</script> </head> <body onload="timer()"> <tabel> <table> <tr> <td><input type="checkbox" onclick="doit(this)"></td> <td>regel 1</td> </tr> <tr style="display:none"> <td><input type="checkbox" onclick="doit(this)"></td> <td>regel 2</td> </tr> <tr style="display:none"> <td><input type="checkbox" onclick="doit(this)"></td> <td>regel 3</td> </tr> <tr style="display:none"> <td><input type="checkbox" onclick="doit(this)"></td> <td>regel 4</td> </tr> <tr style="display:none"> <td><input type="checkbox" onclick="doit(this)"></td> <td>regel 5</td> </tr> <tr style="display:none"> <td><input type="checkbox" onclick="doit(this)"></td> <td>regel 6</td> </tr> <tr style="display:none"> <td><input type="checkbox" onclick="doit(this)"></td> <td>regel 7</td> </tr> </body> Det du skal ændre er antalspoergsmaal og antalsekundertilhver, så de passer, og ellers fylde dine regler ind.
ras2000 -> Ellers en smart måde at lave det på, men jeg har nu siddet i et godt stykke tid og testet og testet. Og har jeg endnu ikke forstået helt hvordan at det egentlig virker. Det er fint nok det med tiden, men jeg synes ikke at det helt fungerer... Det er somom at det kun er den første regel at det med tiden fungerer rigtigt.
Og hvordan skal man så lave, så den først viser submit knappen, når den sidste regel er accepteret?
Der var et lille problem, med linien timer(). Jeg hvade lige glemt at man ikke skal starte en funktion flere gange. Her er et demonstraionseksempel, hvor du kan se den tælle sekunderne. Jeg har sat den til 5 sek, for ikke at dø af kedsomhed. <html> <head> <script type="text/javascript"> antal = 0; antalspoergsmaal = 16; tid = 0; antalsekundertilhver = 5; function timer(){ tid ++; setTimeout("timer()", 1000); document.all.her.value=tid; } function doit(el){ if (tid > antalsekundertilhver && antal < antalspoergsmaal){ antal ++ tid = 0; for (i = 0; i < document.all.length; i ++){ if (document.all[i].tagName == "TR" && document.all[i].style.display == "none"){ document.all[i].style.display = "block"; i = document.all.length; } } }else{ alert("den har du vist ikke læst ordentligt"); el.checked = false; } if (antal == 16) document.formen.ok.style.display = "block"; }
Hvad er variablen "antal", "antalspørgsmål" og "tid" til? Og er du sikker på at det ikke bare at noget som vil skræmme alle væk?
Tror altså at det dér med tiden skal droppes, da det bare gør folk sure. Så prøv hellere bare at lave så man får alle regler samtidig og skal afkrydse, og så når man klikker på submit, så tjekker den om alle sammen er afkrydsede, og advarer så hvis de ikke er...
OK, det har ikke pisse meget med hvad du spurgte om at gøre. Variablen antal er for at tælle hvor mange spørgsmål man har været igennem, knne gøres på en anden måde. Tid er til at holde styr på tiden, det bad du jo om. Og jeg er fuldstændig sikker på at alle vil hade det system, det var der en der gjorde dig opmærksom på helt i starten. Det andet er sgu for simpelt, det er jo en validering. Prøv at tage dig sammen, og se om du ikke selv kan klare den.
Jeg kan jo ikke Java, som jeg sikkert har skrevet før... Så jeg kan altså ikke finde ud af noget...
Jeg bad ikke om noget med tid, i hvert fald ikke hvis du kigger i spørgsmålet til at starte med. Dér skal jeg at jeg bare ville have så den tjekker om alle er afkrydset...
Men det kan ikke kontroleres at de læser dem, derfor har jeg sat en tid på, så de mindste skal være 15 sek. om at læse dem. - skrev du i spørgmsmålet. Jeg kigger lige på det andet og vender tilbage.
"...derfor har jeg sat en tid på...", skrev jeg. Det er altså _mig_ at der har sat tiden på, og den ønsker jeg at slippe af med... Forstod bare dit script, som et nyt forslag, hvor tid blev brugt på en anden måde.
Nå, jeg var ikke klar over at den skulle væk. Her er den simple version i hvert fald. <html> <head> <script type="text/javascript"> function valider(ting){ a = 0; for (i = 0; i < ting.all.length; i++){ if (ting.all[i].tagName == "INPUT" && ting.all[i].type == "checkbox" && ting.all[i].checked == false){ a ++; } } if (a > 0) { alert("du mangler at krydse " + a + " af!") return false; } } </script> </head> <body> <form name="formen" onsubmit="return valider(this)"> <input type="checkbox"> Regel 1<br> <input type="checkbox"> Regel 2<br> <input type="checkbox"> Regel 3<br> <input type="checkbox"> Regel 4<br> <input type="checkbox"> Regel 5<br> <input type="checkbox"> Regel 6<br> <input type="checkbox"> Regel 7<br> <input type="checkbox"> Regel 8<br> <input type="checkbox"> Regel 9<br> <input type="checkbox"> Regel 10<br> <input type="checkbox"> Regel 11<br> <input type="checkbox"> Regel 12<br> <input type="checkbox"> Regel 13<br> <input type="checkbox"> Regel 14<br> <input type="checkbox"> Regel 15<br> <input type="checkbox"> Regel 16<br> <input type="submit" value="ok"> </form> </body> </html> Men folk bliver altså stadig idioter af at skulle hakke sig igennem 16 felter.
Her er en der bare viser alle reglerne med et interval, det kunne være det var smartere. <html> <head> <script type="text/javascript"> a = 0; function doit(){ for (i = 0; i < document.formen.all.length; i++){ if (document.formen.all[i].style.display == "none"){ document.formen.all[i].style.display = "block"; i = document.formen.all.length; } } a ++; if (a < 16) setTimeout("doit()", 3000); if (a == 16) document.formen.ok.style.display = 'block'; } </script> </head> <body onload="doit()"> <form name="formen" onsubmit="return valider(this)"> <div>Regel 1</div> <div style="display:none">Regel 2</div> <div style="display:none">Regel 3</div> <div style="display:none">Regel 4</div> <div style="display:none">Regel 5</div> <div style="display:none">Regel 6</div> <div style="display:none">Regel 7</div> <div style="display:none">Regel 8</div> <div style="display:none">Regel 9</div> <div style="display:none">Regel 10</div> <div style="display:none">Regel 11</div> <div style="display:none">Regel 12</div> <div style="display:none">Regel 13</div> <div style="display:none">Regel 14</div> <div style="display:none">Regel 15</div> <div style="display:none">Regel 16</div> <input type="submit" value="ok" name="ok" style="display:none"> </form> </body> </html>
Det ser ud til at jeg kan bruge en af de to sidste, så du får bare dine 10 point.
Synes godt om
Ny brugerNybegynder
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.