ugrás a tartalomhoz

JavaScript termék duplikálás megakadályozása

reagenross · 2011. Már. 8. (K), 22.55
Sziasztok,

az alábbi függvény azt csinálja, hogy nem engedi kétszer felvenni ugyanazt a terméket a kosárba. Most már működik, de miközben gyártottam, belefutottam egy olyan dologba, amit nem igazán értek.
function addtocart(product,price,image) {
	var product_to_cart;
	var e = document.getElementsByClassName("anchors");
	if (e.length>0) {
		for ( i=0; i<e.length; i++) {
			if (e[i].innerHTML != product) {
				product_to_cart = 1;
			} else {
				product_to_cart = 0;
			break;
			}
		}
	    if (product_to_cart == 1) {
		cart(product,price,image);
	} else {alert('Már van ilyen termék a kosárban');}
	} else {
		cart(product,price,image);
	}
	};
var e = document.getElementsByClassName("anchors"); //ennek a hossza megegyezik a kosárban tárolt elemek számával
. A "for" ciklust ezen végigfuttatva dönti el a program, hogy a paraméterként kapott termék már szerepel -e a kosárban :
for ( i=0; i<e.length; i++) {
			if (e[i].innerHTML != product) {
				product_to_cart = 1;
			} else {
				product_to_cart = 0;
			break;
			}
		}
Amikor először írtam meg ezt a függvényt, a for ciklusban a feltétel "i<=e.length" volt, így az utolsó iterációban olyan tömb index is ellenőrzésre került, amely nem létezett. Ez megváltoztatta a "product_to_cart" változóm addigi "1" értékét, így a soron következő "if" -re már nem teljesült a feltétel. El tudná valaki magyarázni, hogy a két dolognak mi köze van egymáshoz? Miért nem tartotta meg a változóm az értékét? Hiszen mivel az "e[i]" nem létezett, így elvileg az "else" ágba sem futhatott bele, ami megváltoztathatta volna.
 
1

break

Poetro · 2011. Már. 9. (Sze), 06.57
Namármost az a kérdés, hogy mikor kell berakni a terméket a kosárba. Ha a product_to_cart értéke 1, vagy ha 0. Ha akkor, amikor 1, akkor:
function addtocart(product, price, image) {
    var product_to_cart = 1, i,
        e = document.getElementsByClassName("anchors");
    if (e.length > 0) {
        for (i = 0; i < e.length; i++) {
            if (e[i].innerHTML === product) {
                product_to_cart = 0;
                break;
            }
        }
    }
    if (product_to_cart === 1) {
        cart(product, price, image);
    } else {
        alert('Már van ilyen termék a kosárban');
    }
}
Ahogy látod, alapértelmezetten hozzá akarjuk rakni a kosárhoz. Amennyiben már létezik a kosárban, akkor már nem akarjuk hozzáadni a kosárhoz, és ki is lépünk a ciklusból. Végül ha rájöttünk, hogy hozzá akarjuk-e adni a kosárhoz akkor hozzáadjuk, ha pedig nem, akkor jelzünk a felhasználónak, hogy már hozzáadtuk.
2

Ez tényleg furcsa és én nem

bb0072 · 2011. Már. 9. (Sze), 11.59
Ez tényleg furcsa és én nem is tapasztalom, legalábbis FF alatt. Ha az e[i] nem létezik, akkor az e[i].innerHTML TypeError-hoz vezet, a kód végrehajtása megakad, hacsak try - catch-el nem kapod el a hibát.
3

Nekem chrome alatt jött elő.

reagenross · 2011. Már. 9. (Sze), 16.54
Nekem chrome alatt jött elő. Ha befejeztem, megnézem a többi alatt is.