Avatar billede ravnborg Nybegynder
21. december 2003 - 08:37 Der er 22 kommentarer og
2 løsninger

Gange 3 radio-værdier ved onclick

Det er lidt indviklet men jeg prøver at forklare.
Jeg har 3 grupper af radio-felter med navn 1, 2 og 3 der alle har et tal værdi.
Når jeg klikker på en af radio knapperne skal de 3 værdier ganges med hinanden. og skrives på siden.

Hvordan gør jeg det?

V.H.
Ravnborg
Avatar billede mm12010 Nybegynder
21. december 2003 - 10:55 #1
sådan?

<script language="javascript" type="text/javascript">
function gangeRadio(f){
    var res=0;
    for(i=0;i<f.elements.length;i++){
        if(f.elements[i].type=="radio"&&f.elements[i].checked){
            res=(i>0)?parseInt(res*f.elements[i].value):f.elements[i].value;
            }
        }
    document.getElementById('sted').innerHTML=res;
    }
</script>
Avatar billede mm12010 Nybegynder
21. december 2003 - 11:06 #2
if(f.elements[i].type=="radio"&&f.elements[i].checked){
            res=(res!=0)?parseInt(res*f.elements[i].value):f.elements[i].value;
            }
Avatar billede ravnborg Nybegynder
21. december 2003 - 12:35 #3
Hvor skal if sætningen indsættes?

Hvordan får jeg resultatet indsat på siden?
Avatar billede mm12010 Nybegynder
21. december 2003 - 12:37 #4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Gange 3 radio-v&aelig;rdier ved onclick</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
function gangeRadio(f){
    var res=0;
    for(i=0;i<f.elements.length;i++){
        if(f.elements[i].type=="radio"&&f.elements[i].checked){
            res=(res!=0)?parseInt(res*f.elements[i].value):f.elements[i].value;
            }
        }
    document.getElementById('sted').innerHTML=res;
    }
</script>
</head>
<body>
<form name="form1" method="post" action="">
  <input name="radio1" type="radio" value="3" checked>3
  <input name="radio1" type="radio" value="2">2<br>
  <input name="radio2" type="radio" value="5" checked>5
  <input name="radio2" type="radio" value="2">2<br>
  <input name="radio3" type="radio" value="1" checked>1
  <input name="radio3" type="radio" value="4">4<br>
  <input name="click" type="button" value="click" onClick="gangeRadio(this.form);">
</form><br>
<div id="sted">&nbsp;</div>
</body>
</html>
Avatar billede ravnborg Nybegynder
21. december 2003 - 12:43 #5
Hvordan gør man hvis man vil have radio1 og radio2 lagt sammen og der efter ganget med radio3?
Avatar billede roenving Novice
21. december 2003 - 14:05 #6
En lille optimering af det oprindelige spørgsmål ...

function gangeRadio(f){
    var res=1;
    for(i=0;i<f.elements.length;i++){
        if(f.elements[i].type=="radio"&&f.elements[i].checked){
            res*=parseInt(f.elements[i].value);
            }
        }
    document.getElementById('sted').innerHTML=res;
    }


-- når du har fat i værdierne kan du jo gøre hvad du vil:

function regnMedRadio(f){
  var r = new Array();
  for(i=0;f.elements.length>i;i++){
    if(f.elements[i].type=="radio"&&f.elements[i].checked)
      r[r.length] = +f.elements.value;
  }
//gør hvad du vil med de opsamlede værdier (som er tal !-)
}
Avatar billede ravnborg Nybegynder
21. december 2003 - 15:19 #7
Nu fatter jeg ikke en brik af javascript så jeg har brug for lidt mere hjælp:-(
Avatar billede mm12010 Nybegynder
21. december 2003 - 15:43 #8
function gangeRadio(f){
    var res=0;
    for(i=0;i<f.elements.length;i++){
        if(f.elements[i].type=="radio"&&f.elements[i].checked){
            res=(f.elements[i].name.indexOf("3"))?parseInt(res*f.elements[i].value):parseInt(res+f.elements[i].value);
            }
        }
    document.getElementById('sted').innerHTML=res;
    }
Avatar billede ravnborg Nybegynder
21. december 2003 - 15:51 #9
Det giver et resultat, men ikke det rigtige. Radio1 og radio2 skal lægges sammen og derefter skal resultatet ganges med radio3

(radio1+radio2)*radio3
Avatar billede mm12010 Nybegynder
21. december 2003 - 15:55 #10
function gangeRadio(f){
    var res=0;
    for(i=0;i<f.elements.length;i++){
        if(f.elements[i].type=="radio"&&f.elements[i].checked){
            res=(f.elements[i].name.indexOf("3")>-1)?parseInt(res*f.elements[i].value):res+parseInt(f.elements[i].value);
            }
        }
    document.getElementById('sted').innerHTML=res;
    }
Avatar billede roenving Novice
21. december 2003 - 19:33 #11
I stedet for min kommentar indsætter du:

document.getElementById('resultat').innerHTML=(r[0]+r[1])*r[2];
Avatar billede ravnborg Nybegynder
21. december 2003 - 20:00 #12
Hvordan får jeg så resultatet til at stå i et form felt?
Avatar billede mm12010 Nybegynder
21. december 2003 - 20:07 #13
document.FORMNAVN.FORMFELT.value=(r[0]+r[1])*r[2];
Avatar billede ravnborg Nybegynder
21. december 2003 - 22:42 #14
Hvor skal denne linie indsættes?
Avatar billede roenving Novice
21. december 2003 - 23:38 #15
I min kommentar 14:05 skrev jeg en //kommentar, der kan den indsættes !-)
Avatar billede ravnborg Nybegynder
22. december 2003 - 10:04 #16
Hvis jeg bruger dette script:
<script language="javascript" type="text/javascript">
function gangeRadio(f){
    var res=0;
    for(i=0;i<f.elements.length;i++){
        if(f.elements[i].type=="radio"&&f.elements[i].checked){
            res=(f.elements[i].name.indexOf("3")>-1)?parseInt(res*f.elements[i].value):res+parseInt(f.elements[i].value);
            }
        }
    document.getElementById('sted').innerHTML=res;
    }
</script>

Får jeg vist resultatet her:
<div id="sted">&nbsp;</div>


men jeg vil gerne have vist resultatet i dette form felt:
<input type="text" name="ialt" value="" size="10">

Hvordan får jeg den til at gøre det??
Avatar billede roenving Novice
22. december 2003 - 11:40 #17
function regnMedRadio(f){
  var r = new Array();
  for(i=0;f.elements.length>i;i++){
    if(f.elements[i].type=="radio"&&f.elements[i].checked)
      r[r.length] = +f.elements.value;
  }
  f.ialt.value = (r[0]+r[1])*r[2];
}
Avatar billede roenving Novice
22. december 2003 - 11:41 #18
Hov ...

function regnMedRadio(f){
  var r = new Array();
  for(i=0;f.elements.length>i;i++){
    if(f.elements[i].type=="radio"&&f.elements[i].checked)
      r[r.length] = +f.elements[i].value;
  }
  f.ialt.value = (r[0]+r[1])*r[2];
}
Avatar billede ravnborg Nybegynder
22. december 2003 - 12:40 #19
Ååå nej.
Nu ser det ud som jeg ønsker det, men efter at have afprøver det nogle gange kan jeg se at den engang imellem regner forkert.

Hvis man markerer 70 6 10  skulle den sige (70+6)*10 det får den til 1120

Hvad går der galt??

Kildekode:
<script language="javascript" type="text/javascript">
function regnMedRadio(f){
  var r = new Array();
  for(i=0;f.elements.length>i;i++){
    if(f.elements[i].type=="radio"&&f.elements[i].checked)
      r[r.length] = +f.elements[i].value;
  }
  f.ialt.value = (r[0]+r[1])*r[2];
}
</script>

<form name="form1" method="post" action="naeste.asp">
<input type="text" name="ialt" value="" size="10">

<table>
<tr>
    <td width="10" rowspan="11"></td>
    <td width=25 bgcolor=black></td>
    <td></td>
    <td>0<input type="radio" name="2" value="0"></td>
    <td>1<input type="radio" name="3" value="1"></td>
</tr>
<tr>
    <td bgcolor=brown></td>
    <td>10<input type="radio" name="1" value="10"></td>
    <td>1<input type="radio" name="2" value="1"></td>
    <td>10<input type="radio" name="3" value="10"></td>
</tr>
<tr>
    <td bgcolor=red></td>
    <td>20<input type="radio" name="1" value="20"></td>
    <td>2<input type="radio" name="2" value="2"></td>
    <td>100<input type="radio" name="3" value="100"></td>
</tr>
<tr>
    <td bgcolor=orange></td>
    <td>30<input type="radio" name="1" value="30"></td>
    <td>3<input type="radio" name="2" value="3"></td>
    <td>1000<input type="radio" name="3" value="1000"></td>
</tr>
<tr>
    <td bgcolor=yellow></td>
    <td>40<input type="radio" name="1" value="40"></td>
    <td>4<input type="radio" name="2" value="4"></td>
    <td>10000<input type="radio" name="3" value="10000"></td>
</tr>
<tr>
    <td bgcolor=green></td>
    <td>50<input type="radio" name="1" value="50"></td>
    <td>5<input type="radio" name="2" value="5"></td>
    <td>100000<input type="radio" name="3" value="100000"></td>
</tr>
<tr>
    <td bgcolor=blue></td>
    <td>60<input type="radio" name="1" value="60"></td>
    <td>6<input type="radio" name="2" value="6"></td>
    <td>1000000<input type="radio" name="3" value="100000"></td>
</tr>
<tr>
    <td bgcolor=purple></td>
    <td>70<input type="radio" name="1" value="70"></td>
    <td>7<input type="radio" name="2" value="7"></td>
    <td></td>
</tr>
<tr>
    <td bgcolor=gray></td>
    <td>80<input type="radio" name="1" value="80"></td>
    <td>8<input type="radio" name="2" value="8"></td>
    <td></td>
</tr>
<tr>
    <td bgcolor=white></td>
    <td>90<input type="radio" name="1" value="90"></td>
    <td>9<input type="radio" name="2" value="9"></td>
    <td></td>
</tr>
<tr>
    <td bgcolor=gold></td>
    <td></td>
    <td></td>
    <td>0,1<input type="radio" name="3" value="0.1"></td>
</tr>
</table>
    <input name="click" type="button" value="click" onClick="regnMedRadio(this.form);">
</form>
Avatar billede roenving Novice
22. december 2003 - 12:47 #20
1120 er (10 + 6) * 70, så det er fordi rækkefølgen i f.elements følger kode-ordenen og ikke kolonne-ordenen ...

function regnMedRadio(f){
  var r = new Array();
  for(i=0;f.elements.length>i;i++){
    if(f.elements[i].type=="radio"&&f.elements[i].checked)
      r[+f.elements[i].name] = +f.elements[i].value;
  }
  f.ialt.value = (r[1]+r[2])*r[3];
}
Avatar billede ravnborg Nybegynder
22. december 2003 - 13:26 #21
YESS så verker det :-)

I skal begge to have tak for hjælpen.

Kan I ikke oprette et svar, Så vi kan få lukket dette spørgsmål.
Avatar billede roenving Novice
22. december 2003 - 13:29 #22
Velbekomme '-)
Avatar billede mm12010 Nybegynder
03. februar 2004 - 10:42 #23
selv tak :o)
Avatar billede roenving Novice
03. februar 2004 - 19:30 #24
-- og tak for points ;~}
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