Avatar billede kimg Nybegynder
19. november 2000 - 20:10 Der er 16 kommentarer og
1 løsning

Radio buttons if selected

jeg har lavet dette script som virker ok, men jeg ville gerne have det til kun at regne værdierne sammen hvis radio buttons er selected
håber i kan hjælpe

Kim

<script language=\"Javascript\">
function calc() {

var a1 = parseInt(document.test.a1.value);

var b1 = parseInt(document.test.b1.value);

var c1 = parseInt(document.test.c1.value);

var d1 = parseInt(document.test.d1.value);

var a2 = parseInt(document.test.a2.value);

var b2 = parseInt(document.test.b2.value);

var c2 = parseInt(document.test.c2.value);

var d2 = parseInt(document.test.d2.value);

var a3 = parseInt(document.test.a3.value);

var b3 = parseInt(document.test.b3.value);

var c3 = parseInt(document.test.c3.value);

var d3 = parseInt(document.test.d3.value);

var a4 = parseInt(document.test.a4.value);

var b4 = parseInt(document.test.b4.value);

var c4 = parseInt(document.test.c4.value);

var d4 = parseInt(document.test.d4.value);

var a5 = parseInt(document.test.a5.value);

var b5 = parseInt(document.test.b5.value);

var c5 = parseInt(document.test.c5.value);

var d5 = parseInt(document.test.d5.value);

var a6 = parseInt(document.test.a6.value);

var b6 = parseInt(document.test.b6.value);

var c6 = parseInt(document.test.c6.value);

var d6 = parseInt(document.test.d6.value);

var a7 = parseInt(document.test.a7.value);

var b7 = parseInt(document.test.b7.value);

var c7 = parseInt(document.test.c7.value);

var d7 = parseInt(document.test.d7.value);

var a8 = parseInt(document.test.a8.value);

var b8 = parseInt(document.test.b8.value);

var c8 = parseInt(document.test.c8.value);

var d8 = parseInt(document.test.d8.value);

var a9 = parseInt(document.test.a9.value);

var b9 = parseInt(document.test.b9.value);

var c9 = parseInt(document.test.c9.value);

var d9 = parseInt(document.test.d9.value);

var a10 = parseInt(document.test.a10.value);

var b10 = parseInt(document.test.b10.value);

var c10 = parseInt(document.test.c10.value);

var d10 = parseInt(document.test.d10.value);

var a11 = parseInt(document.test.a11.value);

var b11 = parseInt(document.test.b11.value);

var c11 = parseInt(document.test.c11.value);

var d11 = parseInt(document.test.d11.value);

var a12 = parseInt(document.test.a12.value);

var b12 = parseInt(document.test.b12.value);

var c12 = parseInt(document.test.c12.value);

var d12 = parseInt(document.test.d12.value);

var a13 = parseInt(document.test.a13.value);

var b13 = parseInt(document.test.b13.value);

var c13 = parseInt(document.test.c13.value);

var d13 = parseInt(document.test.d13.value);

var a14= parseInt(document.test.a14.value);

var b14 = parseInt(document.test.b14.value);

var c14 = parseInt(document.test.c14.value);

var d14 = parseInt(document.test.d14.value);

var a15 = parseInt(document.test.a15.value);

var b15 = parseInt(document.test.b15.value);

var c15 = parseInt(document.test.c15.value);

var d15 = parseInt(document.test.d15.value);

document.test.reso.value = parseFloat(a1)+parseFloat(a3)+parseFloat(a5)+parseFloat(a7)+parseFloat(a9)+parseFloat(a11)+parseFloat(a13)+parseFloat(a15)+parseFloat(d2)+parseFloat(d4)+parseFloat(d6)+parseFloat(d8)+parseFloat(d10)+parseFloat(d12)+parseFloat(d14);

document.test.resa.value = parseFloat(b1)+parseFloat(b3)+parseFloat(b5)+parseFloat(b7)+parseFloat(b9)+parseFloat(b11)+parseFloat(b13)+parseFloat(b15)+parseFloat(c2)+parseFloat(c4)+parseFloat(c6)+parseFloat(c8)+parseFloat(c10)+parseFloat(c12)+parseFloat(c14);

document.test.ress.value = parseFloat(c1)+parseFloat(c3)+parseFloat(c5)+parseFloat(c7)+parseFloat(c9)+parseFloat(c11)+parseFloat(c13)+parseFloat(c15)+parseFloat(b2)+parseFloat(b4)+parseFloat(b6)+parseFloat(b8)+parseFloat(b10)+parseFloat(b12)+parseFloat(b14);

document.test.rese.value = parseFloat(d1)+parseFloat(d3)+parseFloat(d5)+parseFloat(d7)+parseFloat(d9)+parseFloat(d11)+parseFloat(d13)+parseFloat(d15)+parseFloat(a2)+parseFloat(a4)+parseFloat(a6)+parseFloat(a8)+parseFloat(a10)+parseFloat(a12)+parseFloat(a14);

}

</script>
Avatar billede jakoba Nybegynder
19. november 2000 - 20:48 #1
definer din radio button

<form name=\"dinForm\" ...>
<input type=\"radio\" name=\"blokCalc\">
</form>

oppe i din calc routine skriver du

function calc() {
  if (document.forms.dinForm.blokCalc[0].checked == \'true\') {
    alert(\"Sorry jeg maa ikke beregne når radioknappen er checked\")
  }
  else {
    ...  alle dine beregninger
  }
}

mvh JakobA
Avatar billede jakoba Nybegynder
19. november 2000 - 20:49 #2
Hov jeg fik vendt din betingelse så den beregner når radioknappen IKKE er checket. Det kan du selv fixe :=)
Avatar billede kimg Nybegynder
19. november 2000 - 21:07 #3
Alle radio buttons vil ikke være markeret, bare så den regner værdien på dem der er.

Kim
Avatar billede jakoba Nybegynder
19. november 2000 - 21:28 #4
Hvis der er mere end en radio button med samme navn adresserer du dem enkeltvis med indexet efter navnet:

document.forms.dinForm.blokCalc[0].checked
document.forms.dinForm.blokCalc[1].checked
...

og bygger din betingelse derefter.

mvh JakobA
Avatar billede kimg Nybegynder
19. november 2000 - 21:34 #5
Hej JakobA
jeg forstår ikke helt hvad du mener, men der er ikke 2 radio buttons med samme navn, kan du ikke prøve med et eksempel, i scriptet

Kim
Avatar billede jakoba Nybegynder
19. november 2000 - 22:25 #6
Første svar ER et helt exempel.  Jeg forstår ikke.

Eller er det noget med at der ved hvert felt er en radiobutton?

Altså du har en form der har name=\"test\" og tekstfelter a1, b1, c1, osv.

Hvis det er situationen kan du ved hvert felt lave en radio box ved navn fx: ra1, rb1, rc1, osv

<input type=\"radio\" name=\"ra1\">

og linien der sætter værdi i a1 bliver så til noget i retning af

  if  (document.forms.test.ra1[0].checked) {
    var a1 = parseInt(document.test.a1.value);
  } else {
    var a1 = 0
  };

mere kompakt (men også mere uforståeligt kan hele if-setningen erstattes med:

    var a1 = (document.forms.test.ra1[0].checked)?parseInt(document.test.a1.value):0;

OK?
Avatar billede kimg Nybegynder
19. november 2000 - 22:49 #7
Hej JacobA, jeg forstår nogenlunde hvad du mener, men mine radio buttons og ikke tekstfelter der  hedder a1 b1 c1 osv, når jeg indsætter:
var a1 = (document.forms.test.a1[0].checked)?parseInt(document.test.a1.value):0;

får jeg en fejlmelding, der siger
document.forms.test.a1[0].checked er ikke et objekt

Kim


Avatar billede jakoba Nybegynder
19. november 2000 - 22:59 #8
din radio button SKAL hedde noget andet end a1 det var derfor jeg satte et r foran.

Prøv at vise mig den linie hvor du definerer din radio button.

Og den linie hvor du definerer din <FORM  (indtil >-tegnet)
Avatar billede kimg Nybegynder
20. november 2000 - 05:10 #9
Den ser sådan ud
<input type=\"radio\" name=\"a1\" value=\"1\">
Avatar billede jakoba Nybegynder
20. november 2000 - 10:51 #10
Der bør være en  <FORM ...> ... </FORM> kommando rundt om dine <INPUT ...> kommandoer.
Den vil jeg gerne vide hvordan ser ud.

value=... er ikke en mulig attribut til en radio button.

Er dette det eneste sted du siger name=\"a1\"?
Avatar billede kimg Nybegynder
21. november 2000 - 07:00 #11
Hej JakobA
Her er et lille uddrag af min form.
Kim

<formname=\"test\">
<form method=\"POST\" name=\"test\">
  <div align=\"center\">
    <center>
    <table border=\"0\" cellpadding=\"4\" width=\"86%\">
      <tr>
        <td width=\"108%\" colspan=\"2\">
          <hr>
<h3 align=\"center\">Skal du danse eller dyrke kampsport?</h3>
          <hr>
        </td>
      </tr>
      <tr>
        <td width=\"108%\" colspan=\"2\"><font size=\"2\">Test dig selv!<br>
        Hvis du har svært ved at finde en sport, som tænder dig og holder dig
        til ilden? Så kan testen her hjælpe. Den giver dig et fingerpeg om,
        hvilken motion, der passer til netop dit temperament.</font>
          <hr>
        </td>
      </tr>
      <tr>
        <td width=\"108%\" colspan=\"2\"><font size=\"2\"><b>1. Hvordan vil folk beskrive din
        personlighed?</b></font></td>
      </tr>
      <tr>
      <td width=\"109%\"><font size=\"2\">a. Direkte</font></td>
      <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"1\"></td>
      </tr>
      <tr>
      <td width=\"109%\"><font size=\"2\">b. Venlig</font></td>
      <td width=\"1%\"><input type=\"radio\" name=\"b1\" value=\"1\"></td>
      </tr>
      <tr>
      <td width=\"109%\"><font size=\"2\">c. Engageret</font></td>
      <td width=\"1%\"><input type=\"radio\" name=\"c1\" value=\"1\"></td>
      </tr>
      <tr>
      <td width=\"109%\"><font size=\"2\">d. Tilbagetrukket</font></td>
      <td width=\"1%\"><input type=\"radio\" name=\"d1\" value=\"1\"></td>
      </tr>
Avatar billede jakoba Nybegynder
22. november 2000 - 01:23 #12
Kan det passe at du ønsker at folk skal klikke på een og kun een af radioknapperne a1, b1, c1 og d1?
Og det samme igen med (a2, b2, c2, d2) og (a3, b3, c3, d3), osv?
Og så skal der genereres forskellige værdier altefter hvilken knap i 1-gruppen, 2-gruppen, osv der blev klikket på?

mvh JakobA
Avatar billede kimg Nybegynder
13. december 2000 - 01:04 #13
Ja, det er rigtigt, undskyld den lange tid om tilbage melding, har været bortrejst

Kim
Avatar billede jakoba Nybegynder
13. december 2000 - 07:28 #14
Det må være lovligt. Jeg har så brugt tiden til at lære lidt mere om javascript, og har blandt andet fundet ud af at det jeg sagde om at der ikke må være et value=xxx felt i en radio button er forkert (20/11 2000 10:51:22). Det må der godt og den kan ovenikøbet være nyttig.

Men radio knapper behøver IKKE at have forskellige navne. Og den store fidus ved radio knapper er at hvis 2 eller flere radio knapper har samme navn så kan brugeren slet ikke klikke på mere end een af dem. Eller snarere: Hvis han klikker på en af dem forsvinder markeringen på de andre så det altid kun er den sidst klikkede der er checked.

Så nedenfor har jeg skrevet din 1-gruppe som jeg tror den skal være:

  <tr>
      <td width=\"109%\"><font size=\"2\">a. Direkte</font></td>
      <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"0\"></td>
  </tr>
  <tr>
      <td width=\"109%\"><font size=\"2\">b. Venlig</font></td>
      <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"1\"></td>
  </tr>
  <tr>
      <td width=\"109%\"><font size=\"2\">c. Engageret</font></td>
      <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"2\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">d. Tilbagetrukket</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"3\"></td>
  </tr>

De fire knapper har alle samme navn. Men de har forskellig value= værdi altefter hvor svært/rigtigt/??? det valg er.

og så kan du checke alle a1 knapperne med et stykke script i retning af:

  for (var i=0; document.forms.test.length > i; i++) {
    if (  ( document.test[i].name=\"a1\" )
      &&( document.test[i].checked == true )  ) {
      gruppe1 = document.test[i].value;
    }
  };

Dit første eksempel ser ud som du ønsker at tælle sammen hvor mange har klikket første mulighed (i document.test.reso.value), hvor mange har klikket anden mulighed (i document.test.resa.value), osv

Det kan vi gøre ret nemt med et tælle-op array vi laver til lejligheden:

  var res = new Array(0, 0, 0, 0);  // opret et array med 4 elementer initieret til 0

  for (var i=0; document.forms.test.length > i; i++) {
    if (  ( document.test[i].type == \"radio\" )              // det skal være en radio-knap
      &&( document.test[i].checked == true )  ) {      // og den skal være valgt
      res[ document.test[i].value ] +=1;                    // så tæller vi op for det svar
    }
  }; //end of for-løkke

så ender res arrayet med at indeholde en optælling at hvormange \"første svar\" (i res[0]),
\"andet svar\" (i res[1]), \"tredie svar\" (i res[2]) og \"fjerde svar\" (i res[3]).

forudsat altså at du har sørget for at alle grupperne har value=\"0\" for første svar, value=\"1\" for andet, osv.

Tilsidst lægger du så værdierne i res arrayet over i dine output variable:

    document.test.reso.value = res[0];      // hvormange der valgte første svar
    document.test.resa.value = res[1];      // hvormange der valgte andet svar
    document.test.ress.value = res[2];      // hvormange der valgte tredie svar
    document.test.rese.value = res[3];      // hvormange der valgte fjerde svar

Og så skulle den være der.

Bemærk at vi overhovedet ikke behøver at teste på hvad grupperne hedder. Hvis du blot sørger for at hver gruppe har samme navn vil HTML sørge for at kun een radio knap i den gruppe kan være checked.

mvh  JakobA
Avatar billede kimg Nybegynder
13. december 2000 - 07:37 #15
Tak, det virker fint efter hensigten

Kim
Avatar billede kimg Nybegynder
13. december 2000 - 12:55 #16
Hej JakobA, jeg prøvede med 1 gruppe og 4 knapper, det var ok, så gik det galt da jeg satte det sammen, kan du prøve at lave eks. med 2 knapper hvor det er lige til at kopiere ind i mit dokument

Kim
Avatar billede jakoba Nybegynder
13. december 2000 - 17:58 #17
Det må næsten være parametrene oppe i formen den er gal med.
de 4 knapper i hver gruppe skal have samme navn, men i næste gruppe skal knapperne have et andet navn. value parametrene på knapperne i hver gruppe skal gå fra 0 til 3.

Så den eneste forskel på grupperne herunder er at navn ændrer sig fra gruppe til gruppe.
\"a1\" i første gruppe. \"a2\" i anden og \"a3\" i tredie gruppe.

<!-- forste gruppe -->
  <tr>
    <td width=\"109%\"><font size=\"2\">a. Direkte</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"0\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">b. Venlig</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"1\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">c. Engageret</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"2\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">d. Tilbagetrukket</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a1\" value=\"3\"></td>
  </tr>
<!-- anden gruppe -->
  <tr>
    <td width=\"109%\"><font size=\"2\">a. Direkte</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a2\" value=\"0\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">b. Venlig</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a2\" value=\"1\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">c. Engageret</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a2\" value=\"2\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">d. Tilbagetrukket</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a2\" value=\"3\"></td>
  </tr>
<!-- tredie gruppe -->
  <tr>
    <td width=\"109%\"><font size=\"2\">a. Direkte</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a3\" value=\"0\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">b. Venlig</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a3\" value=\"1\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">c. Engageret</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a3\" value=\"2\"></td>
  </tr>
  <tr>
    <td width=\"109%\"><font size=\"2\">d. Tilbagetrukket</font></td>
    <td width=\"1%\"><input type=\"radio\" name=\"a3\" value=\"3\"></td>
  </tr>

mvh JakobA
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