Autor | Zpráva | ||
---|---|---|---|
_fantomas Profil |
#1 · Zasláno: 29. 12. 2016, 12:25:25
Ahoj, spravil som si odstranovanie položiek z košíku pomocou ajaxu, produkt zmizne pomocou funkcie hide();
a ajax pošle požiadavku PHP. Všetko funguje ako má ale mám problém s tím že ak mám všetky položky odstránené tak mi ostane hlavička tabulky, potrebujem dopísať že ak su všetky položky odstránené tak mi tam niečo vyhodí volajaký text. Takto vyzerá ta tabuľka, dúfam že som to napísal tak že to pochopíte. Vďaka za rady. <div id="message"></div> <table id="cart"> <tr> <th>ID produktu</th> <th>Cena</th> <th>Množstvo</th> <th>Názov produktu</th> <th></th> </tr> <?php foreach ($cartdata as $data) : ?> <tr id="idecko<?=$data['id'];?>"> <td><?=$data['idproduct'];?></td> <td><span id="price"><?=$data['price'];?></span><span id="mena"> €</span></td> <td><span id="quantity"><?=$data['quantity'];?></span></td> <td><?=$data['product_name'];?></td> <td><form method="post"><button id="delete-product" onclick="deleteproduct(this.getAttribute('value')); return false;" name="delete-product" value="<?=$data['id'];?>" type="submit">Odstranit</button></form></td> </tr> <?php endforeach ?> </table> <p>Celková cena <span id="cart-price"><?=$price;?></span> €</p> function deleteproduct(data) { console.log(data); var tablerow = $('#idecko'+data); // Zvolena polozka var quantity = $('#idecko'+data+' td #quantity').text(); // Mnozstvo produktu var price = $('#idecko'+data+' td #price').text(); // Cena produktu var fullprice = quantity * price; // Celkova cena produktu var deletebutton = $('#cart').find('tr td #delete-product'); // Odstranovacie tlacitko var message = $('#message'); // Sprava var cartinfo = $('#cart-info').text(); // Mnozstvo poloziek v kosiku var vysledok = cartinfo - 1; // Mnozstvo poloziek v kosiku - 1 var cartprice = $('#cart-price').text(); // celkova cena vsetkych poloziek var changeprice = cartprice - fullprice; // Zmena ceny $.ajax({ type: 'post', url: '', data: 'id='+data, success: function(data) { if (message.is(':hidden')) { $('#cart-price').text(changeprice); $('#cart-info').text(vysledok); deletebutton.prop('disabled', true); tablerow.hide(); message.slideDown(500).text('Položka bola odstránená'); setTimeout(function() { message.slideUp(500); }, 2000); setTimeout(function() { deletebutton.prop('disabled', false); }, 2500); } } }); } |
||
Časová prodleva: 4 dny
|
|||
Str4wberry Profil |
#2 · Zasláno: 2. 1. 2017, 12:43:39
Napadají mě dva způsoby:
1) Posílat si v AJAXové odpovědi informaci o celkovém počtu položek v košíku a když je rovna nule, tak záhlaví tabulky neukazovat, tj. například tabulku skrýt. 2) Po odebrání si v JS přepočítat počet řádků v tabulce a podle toho zobrazit/skrýt záhlaví. 3) V té akci, která maže produkt z košíku, vrátit celý HTML kód košíku a překreslit celý košík + navázat znovu JS události. Třetí postup mi přijde výhodnější, protože se nemusí duplikovat ta samá šablonovací logika z PHP do JS. První nebo druhá může být ale jediné řešení v případě, že je vypisování košíku moc pomalé. Jinak jestli dobře chápu uvedený kód, tak mě napadá otázka, jestli nějak detekujte stav odebrání z košíku (jestli se to povedlo). Mimochodem, s ohledem na uživatelský dojem z rychlosti se někdy používá trik, kdy se položka vyhodí napřed v JS úplně bez čekání na odpověď serveru a doufá se, že se akce povede (drtivá většina případů). Je ale potom potřeba řešit případ, kdy k dokončení akce skutečně selže. |
||
_fantomas Profil |
#3 · Zasláno: 4. 1. 2017, 10:41:16
Str4wberry:
problém som už vyriešil. Dal som tam podmienku ak je posledná položka v košíku tak zmaže aj tabulku. Vdaka. |
||
Časová prodleva: 8 let
|
0