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.
  1. function addtocart(product,price,image) {  
  2.     var product_to_cart;  
  3.     var e = document.getElementsByClassName("anchors");  
  4.     if (e.length>0) {  
  5.         for ( i=0; i<e.length; i++) {  
  6.             if (e[i].innerHTML != product) {  
  7.                 product_to_cart = 1;  
  8.             } else {  
  9.                 product_to_cart = 0;  
  10.             break;  
  11.             }  
  12.         }  
  13.         if (product_to_cart == 1) {  
  14.         cart(product,price,image);  
  15.     } else {alert('Már van ilyen termék a kosárban');}  
  16.     } else {  
  17.         cart(product,price,image);  
  18.     }  
  19.     };  
  1. 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 :
  1. for ( i=0; i<e.length; i++) {  
  2.             if (e[i].innerHTML != product) {  
  3.                 product_to_cart = 1;  
  4.             } else {  
  5.                 product_to_cart = 0;  
  6.             break;  
  7.             }  
  8.         }  
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:
  1. function addtocart(product, price, image) {  
  2.     var product_to_cart = 1, i,  
  3.         e = document.getElementsByClassName("anchors");  
  4.     if (e.length > 0) {  
  5.         for (i = 0; i < e.length; i++) {  
  6.             if (e[i].innerHTML === product) {  
  7.                 product_to_cart = 0;  
  8.                 break;  
  9.             }  
  10.         }  
  11.     }  
  12.     if (product_to_cart === 1) {  
  13.         cart(product, price, image);  
  14.     } else {  
  15.         alert('Már van ilyen termék a kosárban');  
  16.     }  
  17. }  
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.