Autor | Zpráva | ||
---|---|---|---|
Gogen Profil * |
#1 · Zasláno: 30. 11. 2011, 21:57:16
Zdravím,
potřeboval bych pomoc s jednou jednoduchou funkcí na přepočet košíku v e-shopu. Zasekl jsem se na tom, že ta funkce se provede jen po konec, dál už nepokračuje a nevím proč. s javascriptem dělám jen krátce. function prepocitat() { var cena_za_zbozi = 0; var mnozstvi = 0; var jed_cena = 0; var cena_produktu = 0; var celkova_cena = 0; var j = 0; while(j<=pocitadloradku){ mnozstvi = eval("f_kosik.kusu_" + j + ".value"); jed_cena = document.getElementById("jed_cena_" + j).innerHTML; cena_produktu = mnozstvi * jed_cena; cena_za_zbozi = cena_za_zbozi + cena_produktu; document.getElementById("cena_produktu_" + j).innerHTML = cena_produktu + ",- Kč"; document.getElementById("cena_za_zbozi").innerHTML = cena_za_zbozi + ",- Kč"; document.getElementById("cena_zbozi").innerHTML = cena_za_zbozi + ",-"; j = j + 1; } celkova_cena = cena_za_zbozi + parseInt(document.getElementById("cena_postovneho").innerHTML); document.getElementById("cena_zbozi").innerHTML = cena_za_zbozi + ",- Kč"; } budu rád za každou radu. Děkuji |
||
Chamurappi Profil |
#2 · Zasláno: 30. 11. 2011, 22:03:49
Reaguji na Gogena:
„funkce se provede jen po konec, dál už nepokračuje“ Poněkud zmatené vyjádření. Po jaký konec? Je v proměnné pocitadloradku to, co by v ní mělo být? Skutečně jsou na stránce všechny potřebné elementy? Asi by bodla živá ukázka.
K řádku 10 bych měl jednu připomínku (alternativa), ovšem ta nejspíš nezpůsobuje problém. |
||
Gogen Profil * |
#3 · Zasláno: 30. 11. 2011, 22:09:16
cyklus while se provede bez problému, ale řádky 20 a 21 se neprovedou.
živá ukázka je zde všechny hodnoty se přepočítají, jenom celková cena úplně dole se nepřepočítá |
||
Gogen Profil * |
#4 · Zasláno: 1. 12. 2011, 08:16:05
ještě jedna poznámka, jakmile dám řádky 20 a 21 do cyklu while, tak vše funguje jak má, ale když je dám za cyklus, tak nefungují.
|
||
Kajman_ Profil * |
#5 · Zasláno: 1. 12. 2011, 12:49:13
Když začínáte počíta j od nuly, tak ve while podmínce má být jen menšítko bez rovníka.
|
||
Gogen Profil * |
#6 · Zasláno: 1. 12. 2011, 16:05:56
tím to není, zkusil jsem to rovnítko smazat a pořád nic, i místo proměnné "pocitadloradku" jsem dal konkrétní číslo a nic :-(
nemůže být někde chyba v syntaxi nebo s ukončením toho while? |
||
Witiko Profil |
#7 · Zasláno: 1. 12. 2011, 20:29:24 · Upravil/a: Witiko
Gogen:
Ten eval vypadá nebezpečně. Pokud nebude existovat element s daným id, dojde k vyvolání výjimky a přerušení výkonu scriptu pro neexistenci proměnné. Je zde jistota, že kupříkladu v posledním průběhu cyklem nedojde k výjimce? (to nemůžeme odhadnout, protože html elementy nejsou v ukázkovém kódu zahrnuty - připojuji se k Chamurappiho žádosti o živou ukázku) Nahlédnul bych do konzoly, jestli se nevzteká - Klávesa F12 v Chrome, Internet Exploreru i Firefoxu (add-on Firebug).
Jinak celkově bych ten eval v této situaci nepoužíval. Není to jen mnohem pomalejší, ale tady i velmi náchylné na výjimky. Co třeba:
mnozstvi = document.getElementById("f_kosik.kusu_" + j); mnozstvi = mnozstvi?+mnozstvi.value:0; 0 v případě opačném.
|
||
Chamurappi Profil |
#8 · Zasláno: 1. 12. 2011, 20:45:20
Reaguji na Witika:
„document.getElementById("f_kosik.kusu_" + j);“ Ten f_kosik je jméno formuláře. Stačí skákat po jménech, ostatně už jsem ho odkázal na dvojí přístup. Ať ten element najde jakkoliv, měl by z něj pořád brát value .
|
||
Gogen Profil * |
#9 · Zasláno: 1. 12. 2011, 22:36:16
takže už mi to funguje,
děkuji vám všem, že jste mě nakopli správnou cestou a pomohli k řešení problému. eval jsem si nahradil zápisem mnozstvi = document['f_kosik']['kusu_'+j].value; a chyba byla v podmínce toho while opravdu tam nemá být rovnítko ale pouze menšítko. a taky jsem vůl a jak sem se v tom kódu hrabal, tak jsem sem nakopíroval špatně poslední řádek (21), ve skutečnosti tam má být jiné id elementu. Ještě jednou Vám děkuji a omlouvám se, že jsem obtěžoval s takovou banalitou. |
||
Witiko Profil |
#10 · Zasláno: 1. 12. 2011, 23:34:25
Chamurappi:
Jo, jasné, úplně mi uniknula ta tečka, myslel jsem, že skáče po ID elementů. :-) Gogen: „rovnítko ale pouze menšítko“ Jj, při posledním průchodu ti to muselo házet výjimku, odkazoval jsi na neexistující formulář / proměnnou. |
||
Časová prodleva: 12 let
|
0