JavaScript tömbös kérdés
Ü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: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.
■ 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:
- function calculate() {
- var form = document.getElementById('shopform');
- var array = [];
- var temp;
- var baseval = 0;
- var retval = 0;
- var k = 0;
- var i = 0;
- for(i = 0; i < form.elements.length; i++) {
- if(form.elements[i].checked) {
- if(form.elements[i].id.substr(0,3) == 'mat') {
- baseval = document.getElementById('pc_'+form.elements[i].id).innerHTML;
- } else {
- array[k] = parseInt(document.getElementById('pc_'+form.elements[i].id).innerHTML);
- k++;
- }
- }
- }
- retval = baseval;
- for(i = 0; i < array.length; i++) {
- temp = (baseval/100)*array[k];
- retval = retval+temp;
- }
- out = retval+" HUF";
- document.getElementById('total_price').innerHTML = out;
- }
biztos én vagyok a hülye
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!
összegzés
na
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.
azért