roomMedlem sedan mars 2001270 inlägg Hej. Jag undrar hur jag ska göra för att summera ett visst antal värden. Istället för att förklara är det lättast att visa.
Gå till följande adress så förstår ni hur jag menar, min fråga blir därefter, hur ska jag få summan på enklast möjliga sätt. Är ingen fena på javascript men det vet jag att det finns andra som är.
Länk:
http://arno.dedic28.kontrollpanelen.se/default.asp?content=daoStep2
Tack på förhand,
// D.
KoplikMedlem sedan juli 20011 129 inlägg myArray = new Array()
myVal = new Array()
myArray[0] = "dao30cm";
myArray[1] = "dao40cm";
myArray[2] = "dao50cm";
myArray[3] = "dao75cm";
myArray[4] = "dao100cm";
...
myVal[0] = 30;
myVal[0] = 40;
myVal[0] = 50;
myVal[0] = 75;
myVal[0] = 100;
...
function calculateTotal()
{
var Result = 0;
for(i=0;i<myArray.length;i++)
{
Result += document.getElementById(myArray[i]).options[document.getElementById(myArray[i]).selectedIndex].value * myVal[i];
}
document.getElementById(ResultDivOrTD).innerHTML = Result + " m";
}
Jag började på en idé här sen gick jag på möte och blev lite förvirrad över vad jag ville åstadkomma. Men detta är min grundtanke.
Det finns många olika sätt att lösa detta på, speciellt utan jobbiga manuella arrayer. Men de (bör) fungera.
roomMedlem sedan mars 2001270 inlägg Problem 1: Funkar fint i explorer. Men i mozilla händer inget.. Anropar funktionen vid onchange på alla selects och inputs. Kolla gärna länken ovan för att prova.
Tack på förhand,
<script language="javascript">
myArray = new Array()
myVal = new Array()
myArray[0] = "dao30cm";
myVal[0] = 30;
myArray[1] = "dao40cm";
myVal[1] = 40;
myArray[2] = "dao50cm";
myVal[2] = 50;
myArray[3] = "dao75cm";
myVal[3] = 75;
myArray[4] = "dao100cm";
myVal[4] = 100;
myArray[5] = "dao125cm";
myVal[5] = 125;
myArray[6] = "dao150cm";
myVal[6] = 150;
myArray[7] = "dao200cm";
myVal[7] = 200;
function calculateTotal()
{
var Result = 0;
for(i=0;i<myArray.length;i++)
{
Result += document.getElementById(myArray[i]).options[document.getElementById(myArray[i]).selectedIndex].value * myVal[i]/100;
}
Result += (document.getElementById('endless_pcs').value * document.getElementById('endless_lenght').value)/100;
Result += (document.getElementById('2partHook_pcs').value * document.getElementById('2partHook_lenght').value)/100;
if (Result > 299) {
document.getElementById('totalLenght').innerHTML = "<strong>Total bandlängd: " + Result + " m</strong>";
}
else {
document.getElementById('totalLenght').innerHTML = "<strong>Total bandlängd: <font color=red>" + Result + " m</font></strong>";
}
}
</script>
roomMedlem sedan mars 2001270 inlägg ingen som har någon aning varför det inte fungerar i mozilla?
tantenMedlem sedan nov. 20051 596 inlägg Nu är jag inte hemma på javascript men .innerHTML i xhtm-dokument i Mozilla var åtminstone för något år sedan något som inte fungerade. Vet inte om det är fixat nu men eftersom det inte fungerar för dig så kanske det är så fortfarande...
Men sök på det så kanske du hittar någon workaround eller något
KoplikMedlem sedan juli 20011 129 inlägg Jag kikar lite på det nu. Kul att mitt script fungerade halvt även fast jag körde från minne.
Första felet är att vi kör med getElementsById när ID:t är något annat, byt ut alla getElementsById mot getElementsByName där myArray anropas.
Dock fungerar det ändå inte för mig. När jag hämtar elementet och försöker anropa samlingen options så vill inte firefox vara med.
Jag har ingen aning varför, då jag är säker på att det ska fungera. Jag får luska vidare lite.
Återkommer
KoplikMedlem sedan juli 20011 129 inlägg Okej, nu fick jag det att funka i FF.
Fråga mig inte varför, men när jag kör getElementByName (eller ID för den delen) så fungerar det inte, om jag dock kör på det sedvanliga sättet och följer DOM strukturen utan hjälp så fungerar det.
function calculateTotal()
{
var Result = 0;
for(i=0;i<myArray.length;i++)
{
Result += document.dao1[myArray[i]].options[document.dao1[myArray[i]].selectedIndex].value * myVal[i]/100;
Result += (document.getElementById('endless_pcs').value * document.getElementById('endless_lenght').value)/100;
Result += (document.getElementById('2partHook_pcs').value * document.getElementById('2partHook_lenght').value)/100;
}
if (Result > 299) {
document.getElementById('totalLenght').innerHTML = "<strong>Total bandlängd: " + Result + " m</strong>";
}
else {
document.getElementById('totalLenght').innerHTML = "<strong>Total bandlängd: <font color=red>" + Result + " m</font></strong>";
}
}
Istället för getElementById så kör jag document.dao1[myArray*].options (osv...)
Då skall det fungera.
Edit: Rensade lite onödig kod*
The_HulkMedlem sedan juni 20031 837 inlägg det heter väl getElementsByName och inte getElementByName?
getElementsByName('...') returnerar en array av objekt där objekten har attributet "name='...'"
vill man få ut endast ett objekt är det getElementById('...') som gäller.
KoplikMedlem sedan juli 20011 129 inlägg
The_Hulk skrev:
det heter väl getElementsByName och inte getElementByName?
getElementsByName('...') returnerar en array av objekt där objekten har attributet "name='...'"
vill man få ut endast ett objekt är det getElementById('...') som gäller.
Det har du ju rätt i. Tanken har aldrig slagit mig, dock så använder jag mig aldrig utav getElementsByName heller.
Detta går ju lätt att ordna genom att byta ut ID:t mot namnet som står och köra getElementById istället.
Tack vare TheHulk så slängde jag ihop koden med getElementsByName istället.
Sen kvittar det vilken kod du använder, då båda ska fungera.
function calculateTotal()
{
var Result = 0;
for(i=0;i<myArray.length;i++)
{
Result += document.getElementsByName(myArray[i])[0].options[document.getElementsByName(myArray[i])[0].selectedIndex].value * myVal[i]/100;
}
Result += (document.getElementById('endless_pcs').value * document.getElementById('endless_lenght').value)/100;
Result += (document.getElementById('2partHook_pcs').value * document.getElementById('2partHook_lenght').value)/100;
if (Result > 299) {
document.getElementById('totalLenght').innerHTML = "<strong>Total bandlängd: " + Result + " m</strong>";
}
else {
document.getElementById('totalLenght').innerHTML = "<strong>Total bandlängd: <font color=red>" + Result + " m</font></strong>";
}
}