Avatar billede ssv Nybegynder
13. november 2008 - 18:45 Der er 10 kommentarer og
1 løsning

"Deaktivér" radiobuttons samt counter

Hello.

Det bliver noget af en forklaring der kommer denne gang, men jeg skal prøve at gøre mig så tydelig så mulig.

Siden der er knyttet til spørgsmålet kan findes her (dette vil også blive demo-siden): http://proads.dk/simon/radiogroup.html

Kort sagt er det jeg skal bruge, en kodeløsning der kan tælle rigtige og forkerte svar op. Ex: Jeg vælger i radio1 i første kolonne. Radioen er sat til at være det korrekte svar og skal resultere i 3 point - disse skal så tælle "live" op i counteren til højre. Vælger man et forkert svar skal der ikke tælle nogle point op.

Når en radiobutton er valgt skal den "deselecte" resten af gruppen (de 3 radiobuttons der er i hver kollonne). Det skal dog være sådan at man kan ændre sit svar efterfølgende, de skal nærmere blot fade lidt, så man hurtigt kan se hvilke der er brugt.

Er der noget i gerne vil have uddybet, så sig endelig til :-)
Avatar billede roenving Novice
14. november 2008 - 10:38 #1
-- fadingen ville jeg springe fuldstændig over, det er vel tydeligt nok, at de har en prik inde i sig !-)

-- og der kom mange spørgsmål til opgavens karakter undervejs, men en løsning ud fra din aktuelle kode kunne være:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Titel</title>
<style type="text/css">
html, body { margin: 0; padding: 0; font: 11px/17px Verdana, Arial, Helvetica, sans-serif; }
p { font-weight: bold; margin: 0; padding: 0; color: #333; }
.clm { width: 100px; float: left; border-right: 1px #ccc solid; margin: 40px 0 0 20px; }
#totalcounter { background: #f4f4f4; border: 1px solid #ccc; height: 75px; font: bold 24px/75px "Calibri", "Trebuchet MS", Verdana, Arial, sans-serif; float: left; width: 100px; text-align: center; margin: 40px 0 0 0; }
.nostroke { border: 0; }
</style>

<script type="text/javascript">
var rightAnswers = {"first":0, "second":2, "third":1};
function checkAndShow(){
  var group, inps = document.getElementsByTagName("input"), rigtige = 0;
  for(nm in rightAnswers){
    group = [];
    for(var i=0, im=inps.length; im>i; i++){//vi opretter en gruppe med det aktuelle navn
      if(inps[i].type=="radio" && inps[i].name == nm)
        group.push(inps[i]);
    }
    rigtige += group[rightAnswers[nm]].checked ? 1 : 0;
  }
  document.getElementById("totalcounter").firstChild.nodeValue = "  " + rigtige + " stk";
}
</script>

</head>

<body>
<div class="clm">
  <p>Kolonne 1</p>
  <input type="radio" name="first" onclick="checkAndShow();"> Rigtigt<br>
  <input type="radio" name="first" onclick="checkAndShow();"> Forkert<br>
  <input type="radio" name="first" onclick="checkAndShow();"> Forkert
</div>
<div class="clm">
  <p>Kolonne 2</p>
  <input type="radio" name="second" onclick="checkAndShow();"> Forkert<br>
  <input type="radio" name="second" onclick="checkAndShow();"> Forkert<br>
  <input type="radio" name="second" onclick="checkAndShow();"> Rigtigt
</div>
<div class="clm nostroke">
  <p>Kolonne 3</p>
  <input type="radio" name="third" onclick="checkAndShow();"> Forkert<br>
  <input type="radio" name="third" onclick="checkAndShow();"> Rigtigt<br>
  <input type="radio" name="third" onclick="checkAndShow();"> Forkert
</div>

<div id="totalcounter">  0 stk</div>

</body>
</html>

-- hvis der skal være andre indgangsvinkler er der rigtig mange muligheder for at gøre det anderledes, men een ting undgås ikke: at det rigtige svar findes i dokumentet på en eller anden måde !-)
Avatar billede ssv Nybegynder
14. november 2008 - 10:44 #2
Vi skal nok skjule det rigtige svar med ASP, så det ikke er alt for let for dem ;-)

Scriptet virker jo super, tak for det. Er det muligt at disable en hel gruppe (3 pr. kollonne), så det ikke er muligt at redigere sit svar igen? Brugeren vil selvfølgelig altid kunne refreshe browseren og svare igen, men der må gerne være en funktion så det ikke er _alt_ for let for dem at ændre svar :-)
Avatar billede ssv Nybegynder
14. november 2008 - 10:52 #3
Jeg fandt lige en sjov lille ting på woork.blogspot.com - noget alá det jeg havde i tanker til at starte med. Idéen ville så være at en hel gruppe skulle 'deaktiveres' (eller fade) når en enkelt radio button er markeret.

Se mere her: http://proads.dk/simon/opacity/
Avatar billede roenving Novice
14. november 2008 - 11:13 #4
Skjule det med asp ?-)

-- så skal du jo en tur rundt om serveren for at kunne generere antal rigtige svar ...

-- og eksemplet bruger et javascript-library, der hedder scriptaculous, som implementerer en masse udvidelser og tilføjelser til DOM-handling, heraf er nogle baseret på invalid kode ...

-- og at disable og/eller fade dem noget er nu ikke så voldsomt med simpel dom, men gradvis fade er meget voldsommere (bl.a. pga. browserforskelle, du kan prøve at se på kodelængden i mit eksempel på: http://roenving.users.whitehat.dk/WD5Opacity.html !-)

-- f.eks. disable:

...
  for(nm in rightAnswers){
    group = [], actSeld = false;
    for(var i=0, im=inps.length; im>i; i++){//vi opretter en gruppe med det aktuelle navn
      if(inps[i].type=="radio" && inps[i].name == nm){
        group.push(inps[i]);
        actSeld = actSeld || inps[i].checked;
      }
    }
    rigtige += group[rightAnswers[nm]].checked ? 1 : 0;
    if(actSeld){
      for(var i=0, im=group.length; im>i; i++)
        group[i].disabled = "disabled";
    }
  }
...
Avatar billede ssv Nybegynder
14. november 2008 - 11:42 #5
Vi skal nok finde en løsning på det. Det med at disable en hel gruppe er super, det virker som det skal.

Kan man på en eller anden måde tilføje ekstra "lodder" til counteren ved nogle bestemte handlinger - fx ved at klikke på et link? Klikkes der på et link skal counteren så tilføje et ekstra lod. Og så er det vist slut med flere tilføjelser ;-)
Avatar billede roenving Novice
15. november 2008 - 10:18 #6
Hav en grundvariabel, defineret udenfor funktionen, som du kan opdatere ved link-kliks, f.eks.

<script type="text/javascript">
var rightAnswers = {"first":0, "second":2, "third":1};
var numClicks = 0;
function checkAndShow(){
  var group, inps = document.getElementsByTagName("input"), rigtige = numClicks;

...

<a href="http://..." onclick="numClicks++;checkAndShow();">Link</a>

-- els velbekomme '-)
Avatar billede ssv Nybegynder
15. november 2008 - 13:29 #7
Tak for hjælpen :-)
Avatar billede ssv Nybegynder
16. november 2008 - 01:29 #8
Hvis du har overskud til det, har jeg en ekstra lille tilføjelse ;-): Er der muligt at skjule linksene når de er blevet trykket på? Og kan det gøres sådan at linksene ikke bliver vist igen når browseren refreshes?
Avatar billede roenving Novice
17. november 2008 - 06:36 #9
Tjah, f.eks.

<script type="text/javascript">
var rightAnswers = {"first":0, "second":2, "third":1};
var numClicks = 0;
function checkAndShow(lnk){
  if(lnk)
    lnk.style.visibiliy="hidden";
  var group, inps = document.getElementsByTagName("input"), rigtige = numClicks;

...

<a href="http://..." onclick="numClicks++;checkAndShow(this);">Link</a>

-- det burde betyde at alt nulstilles, men browser-opførsel omkring form-elementer er ikke helt ens ...

-- og tak for point ;~}
Avatar billede ssv Nybegynder
17. november 2008 - 10:42 #10
Jeg kan ikke rigtig få det til at spille - se her: http://proads.dk/simon/radiogroups_v2.html

Linkene (Link 1, Link 2 og Link 3) skulle gerne forsvinde (skjules) når de er blevet klikket på, så det ikke er muligt længere at trykke på dem. Er det mig der har gjort noget forkert, eller duer det bare ikke :-)?
Avatar billede ssv Nybegynder
17. november 2008 - 12:24 #11
Well, det kunne klares med en style.display='none', men jeg ved ikke helt hvor holdbar den løsning er. Har ud et bedre forslag? :-)
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

Seneste spørgsmål Seneste aktivitet
I dag 16:10 Tomt felt i Start Af ErikHg i Windows
I går 23:00 Hyperlink til tekst Af Nanarsi i Excel
18/0121:03 Forlænge ringetid Af 1Dorte i Apps til Android
17/0117:38 Video ikoner Af Malm i Windows
17/0117:27 Video ikoner Af logbuilders i Windows