Autor Zpráva
Gogen
Profil *
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
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 *
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 *
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 *
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 *
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
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 evalv 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;
Takhle bude v proměnné buď číslo vyjadřující množství v případě nalezení elementu a 0 v případě opačném.
Chamurappi
Profil
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 *
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
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0