ugrás a tartalomhoz

JavaScript tömbös kérdés

chronos · 2007. Május. 16. (Sze), 17.34
Üdv mindenki.
Bocs, hogy ilyen alap kérdéssel zaklatom itt a fórum kedélyeit, és még inkább bocs, ha már volt erről szó, de beleszaladtam egy elég bosszantó problémába JS téren. Egy form radio elemein zongoráznék végig. Mindegyikhez tartozik egy "pc_"-vel kezdődő, és a radio id-jével folytatódó id-jű span (tehát a 'fp_1' radio spanja 'pc_fp_1'. A "mat"-os radio adja az alap számot, amit aztán a többi radio értéke százalékosan növelne (tehát a span tartalma a százalék, amennyivel emelni kell). Eddig ilyenem volt:
  1. function calculate() {  
  2.     var form = document.getElementById('shopform');  
  3.     var array = [];  
  4.     var temp;  
  5.     var baseval = 0;  
  6.     var retval = 0;  
  7.     var k = 0;  
  8.     var i = 0;  
  9.     for(i = 0; i < form.elements.length; i++) {  
  10.         if(form.elements[i].checked) {  
  11.             if(form.elements[i].id.substr(0,3) == 'mat') {  
  12.                 baseval = document.getElementById('pc_'+form.elements[i].id).innerHTML;  
  13.             } else {  
  14.                 array[k] = parseInt(document.getElementById('pc_'+form.elements[i].id).innerHTML);  
  15.                 k++;  
  16.             }  
  17.         }  
  18.     }  
  19.     retval = baseval;  
  20.     for(i = 0; i < array.length; i++) {  
  21.         temp = (baseval/100)*array[k];  
  22.         retval = retval+temp;  
  23.     }  
  24.     out = retval+" HUF";  
  25.     document.getElementById('total_price').innerHTML = out;  
  26. }  
viszont ez csak a 'baseval'-t írja ki, aztán "NaNNaN", amit abszolút nem tudok hova tenni. Ráadásul azt a hibát adja, hogy "array has no properties". Ezt a fenti kódot hol és hogyan írjam át, hogy rendeltetésszerűen működjön? Előre is köszönöm a válaszokat.
 
1

biztos én vagyok a hülye

Fraki · 2007. Május. 16. (Sze), 21.04
de ebből nem sokat értek... Pontosabban mi a feladat, miért kellenek rádió gombok hozzá stb.

Annyit mondhatok, hogy a 8. sorra nincs szükség. Aztán a 21. sorban (miért nincs sorszámozás a weblabor syntax kiemelőjében?) az array[k] értéke undefined, így az az utáni kalkulációk mind NaN-t adnak vissza (Not A Number) Ha két NaN-t összeadsz, abból könnyen lehet NaNNaN :)

De fogalmam sincs, mit akar csinálni a kódod.

Egyébként pedig használj Firebugot debugoláshoz!
2

összegzés

chronos · 2007. Május. 17. (Cs), 07.25
egy boltban kell összeadnia a kiválasztott elemek árait. mindegyikhez tartozik egy span, amiben benne van az ára (de ezt leírtam feljebb is). a mat kezdetű adja az alap árat, amit a többi százalékosan módosít. végül a végeredményt kiírja a total_price div-be.
3

na

Fraki · 2007. Május. 17. (Cs), 09.11
Igen, de továbbra sem értem, hogy mi szükség lehet itt rádiógombokra (a kerek fajta), mikor azok kizárólagosak. Nem csekboxra gondoltál (négyszögletes)? Meg ez a százalékosdi se világos...

De mindegy, az ránézésre látszik, hogy mint mondtam, az array[k]-nál elhasal a kód, mert az mindig undefined (a tömb bővítése után növeled a 'k' mutatót). Azt is mondtam, hogy fölösleges a 'k' változó, használj helyette array.push()-t. A 21. sorba array[k] helyett array[i] kéne.
4

azért

chronos · 2007. Május. 17. (Cs), 18.52
köszönöm szépen, ezzel sikerült megoldanom.