Autor | Zpráva | ||
---|---|---|---|
rad Profil * |
existuje v javascriptu neco jako v php number format ? resim zobrazovani a vypocet ceny v php to funguje ok s funkci number format zamenim tecku za carku a je to ale v javascriptu mi kdybych chtel provadet vypocty s desetinou carkou hlasi chybu ... jak bych mel toto resit - jak to resite vy ? jde o nakupni kosik s nejakym ajaxem pro vypocet celkove ceny
|
||
Keeehi Profil |
#2 · Zasláno: 10. 4. 2011, 23:59:16
rad:
Počítat normálně a formátovat až při výstupu. |
||
Segi_L Profil |
#3 · Zasláno: 11. 4. 2011, 00:12:10
Ja to riešim tak, že pokiaľ potrebujem počítať s číslom, ktoré je zobrazené s čiarkou, tak pred výpočtom zmeňím čiarku za tečku.
var cena = '100,50' cena = cena.replace(',', '.'); |
||
rad Profil * |
jak by jste to vyresily napriklad tady ?
function calcPrice() { var totalPrice = 0; $("#cart tr .quantity").parent().each(function() { var quantity = $(".quantity input", this).val(); var unitPrice = $(".unit_price", this).text().slice(0, 3); var extendedPrice = quantity*unitPrice; extendedPrice = Math.round(extendedPrice*100)/100; // .toFixed(2) totalPrice+= extendedPrice; totalPrice=Math.round(totalPrice*100)/100; // .toFixed(2) $(".extended_price", this).html( extendedPrice +" €"); $("#total_price").html("TOTAL "+ totalPrice +" €" ); }); if ( totalPrice == 0 ) { $("#cart").parent().replaceWith("<p>You have no items in your cart.</p>"); } } |
||
joe Profil |
#5 · Zasláno: 11. 4. 2011, 14:15:15
Můžu vědět, proč to nepočítáš pouze na jedné straně (server - PHP), ale chceš udělat i to samé u klienta? Nehledě na to, že pokud bys to případně rozšiřoval pro více zemí, budeš to předělávat i v JavaScriptu...
|
||
rad Profil * |
#6 · Zasláno: 11. 4. 2011, 14:19:47
protoze je tam ajax a javascript proste nepocita s carkou
|
||
joe Profil |
#7 · Zasláno: 11. 4. 2011, 14:22:40
rad:
„protoze je tam ajax a javascript proste nepocita s carkou“ To není moc dobrý důvod. Chápeš princip AJAXu? Ten asynchronní požadavek se posílá na server, nevidím důvod proč si cenu nespočítat už tam, na jednom místě a taháš do toho JavaScript. |
||
rad Profil * |
#8 · Zasláno: 11. 4. 2011, 14:28:40
samozrejme ze ji pocitam pomoci php akorat se mi proste nezobrazi - na serveru nic nemam mam to v session
|
||
joe Profil |
#9 · Zasláno: 11. 4. 2011, 14:35:51
rad:
„na serveru nic nemam mam to v session“ Sessions jsou dostupné ze serveru :-) „samozrejme ze ji pocitam pomoci php akorat se mi proste nezobrazi“ Samo od sebe jistě ne, musíš ji tím PHP dostat do JavaScriptu - tedy jako výsledek asynchronního požadavku, vhodný pro to je například formát JSON. |
||
rad Profil * |
#10 · Zasláno: 11. 4. 2011, 14:41:16
ok jak bych mel vyresit tento toto bez toho ze bych volal vysledky ze session a tahal je pres json ?
jde mi o to to zformatovat na vystupu zkousel jsem reseni od Segi_L ale bohuzel ... diky |
||
rad Profil * |
#11 · Zasláno: 11. 4. 2011, 15:29:12
ok takze nemam nic pocitat na strane javascriptu jen proste zobrazovat vysledky ... jestly jsem to spravne pochopil. JSON jsem nikdy nedelal tak nevim moc jak na to ale snad to nebude slozite
|
||
rad Profil * |
#12 · Zasláno: 11. 4. 2011, 15:32:54
presto pro ted nemohl bys mi poradit jak na to s tim kodem co je uz hotov ?
|
||
joe Profil |
#13 · Zasláno: 12. 4. 2011, 21:53:39
Nevím, co pořád vymýšlíš. Pokud přidávání do košíku funguje na AJAXu, tak jak pak aktualizuješ ten blok s tím košíkem, kde píšeš cenu a počet položek, případně něco dalšího?
Tím pádem to rovnou spočítáš v PHP a odešleš to jako odpověď pro XmlHttpRequest, tzn. že počítat v JS nic nemusíš. |
||
Časová prodleva: 5 dní
|
|||
rad Profil * |
#14 · Zasláno: 18. 4. 2011, 02:36:18
pridavani na ajaxu nefunguje to je prave to.
|
||
joe Profil |
#15 · Zasláno: 18. 4. 2011, 03:08:14
rad:
Píšeš něco o desetinné čárce/tečce a po několika příspěvcích napíšeš, že to vůbec přes AJAX nemáš nebo že to nefunguje, ale v [#6] píšeš, že tam AJAX je. Už nevím co kde je a co vlastně potřebuješ. Používáš jQuery, záleží jestli používáš ještě nějaký PHP framework, který to může řešit už skoro za tebe nebo si to musíš naprogramovat sám. Příklad: Zřejmě máš nějaký formulář a v něm tlačítko, které přidává zboží do košíku. Chceš to přes AJAX, tzn. že musíš všem takovým formulářům zrušit jejich odeslání a pak na ně navěsit funkci, která může vypadat třeba nějak takhle: function ajaxForm(form) { var sendData = {}; // tady je treba vyplnit data, co se posilaji, tzn. stejně tak, jako kdyby se formular odeslal; jde to udělat i komplexně tak, aby to fungovalo na každý formulář, nechám to na tobě /* takze napriklad var sendData { productId: 10, count: 2 } Pokud bude metoda POST, pak se k ni v PHP dostanes pres $_POST['productId'] a $_POST['count']. Ten skript, kam to bude smerovat, v tomto pripade je stejny jako action formulare, pak udela: echo '{ 'count': 2, 'price': 5499 }'; tzn. že v payload v callback funkci bude JavaScript objekt, ve kterem dostaneš to, co chceš - tedy payload.count ... bude 2 a payload.price ... bude 5499 */ var options = { url: form.attr("action"), // akce type: form.attr("method") || "get", // metoda uvedena u formulare nebo get pokud nema atribut method data: sendData, // odeslana data success: ajaxSuccess, // callback funkce po uspechu dataType: "json" // data ve formatu JSON }; jQuery.ajax(options); } function ajaxSuccess(payload) { console.log(payload); // vypis do konzole, co server vratil pri uspesnem asynchronnim pozadavku } |
||
rad Profil * |
#16 · Zasláno: 18. 4. 2011, 09:59:55
je to tak ze z daty takto manipuluju kdyz zobrazuju nakupni kosik takto :
$(function() { $("#cart tr .remove input").click(function() { var orderCode = $(this).val(); $.ajax({ type: "GET", url: "cart_action.php", data: "remove[]=" + orderCode, success: function() { $("#cart tr .remove input[value=" + orderCode + "]").parent().parent().fadeOut(500, function() { $(this).remove(); calcPrice(); }); }, error: function() { window.location("cart_action.php?remove[]="+orderCode); } }); }); $("#cart tr .quantity input").change(function() { var orderCode = $(this).attr("name").slice(9, -1); var quantity = $(this).val(); $.ajax({ type: "GET", url: "cart_action.php", data: "quantity[" + orderCode + "]=" + quantity, success: function() { // var startColor = $("#cart tr .quantity input[name*=" + orderCode + "]").parent().parent().hasClass("odd") ? "#eee" : "#fff"; //A FIXE !!! // $("#cart tr .quantity input[name*=" + orderCode + "]").parent().parent().find("td").animate({ backgroundColor: "#ff8" }, 100).animate({ backgroundColor: startColor }, 800); calcPrice(); }, error: function() { window.location("cart_action.php?quantity[" + orderCode + "]=" + quantity); } }); }); }); function calcPrice() { var totalPrice = 0; $("#cart tr .quantity").parent().each(function() { var quantity = $(".quantity input", this).val(); var unitPrice = $(".unit_price", this).text().slice(0, 3); var extendedPrice = quantity*unitPrice; extendedPrice = Math.round(extendedPrice*100)/100; // .toFixed(2) totalPrice+= extendedPrice; totalPrice=Math.round(totalPrice*100)/100; // .toFixed(2) $(".extended_price", this).html( extendedPrice +" €"); $("#total_price").html("TOTAL " + totalPrice +" €" ); }); if ( totalPrice == 0 ) { $("#cart").parent().replaceWith("<p class=\"produit_null\">Le panier est vide.<a href=\"index.php\" title=\"\" class=\"continue\" >Continuer vos achats</a></p>"); $(".paypall").replaceWith(""); } } |
||
rad Profil * |
#17 · Zasláno: 18. 4. 2011, 11:50:12
diky takze kdyz bych vysel ze sveho puvodniho
$(function() { $("#cart tr .remove input").click(function() { var orderCode = $(this).val(); $.ajax({ type: "GET", url: "cart_action.php", data: "remove[]=" + orderCode, success: function() { $("#cart tr .remove input[value=" + orderCode + "]").parent().parent().fadeOut(500, function() { $(this).remove(); calcPrice(); }); }, error: function() { window.location("cart_action.php?remove[]="+orderCode); } }); }); $("#cart tr .quantity input").change(function() { var orderCode = $(this).attr("name").slice(9, -1); var quantity = $(this).val(); $.ajax({ type: "GET", url: "cart_action.php", data: "quantity[" + orderCode + "]=" + quantity, success: function() { // var startColor = $("#cart tr .quantity input[name*=" + orderCode + "]").parent().parent().hasClass("odd") ? "#eee" : "#fff"; //A FIXE !!! // $("#cart tr .quantity input[name*=" + orderCode + "]").parent().parent().find("td").animate({ backgroundColor: "#ff8" }, 100).animate({ backgroundColor: startColor }, 800); calcPrice(); }, error: function() { window.location("cart_action.php?quantity[" + orderCode + "]=" + quantity); } }); }); }); function calcPrice() { var totalPrice = 0; $("#cart tr .quantity").parent().each(function() { var quantity = $(".quantity input", this).val(); var unitPrice = $(".unit_price", this).text().slice(0, 3); var extendedPrice = quantity*unitPrice; extendedPrice = Math.round(extendedPrice*100)/100; // .toFixed(2) totalPrice+= extendedPrice; totalPrice=Math.round(totalPrice*100)/100; // .toFixed(2) $(".extended_price", this).html( extendedPrice +" €"); $("#total_price").html("TOTAL " + totalPrice +" €" ); }); if ( totalPrice == 0 ) { $("#cart").parent().replaceWith("<p class=\"produit_null\">Le panier est vide.<a href=\"index.php\" title=\"\" class=\"continue\" >Continuer vos achats</a></p>"); $(".paypall").replaceWith(""); } } co bych mel zmenit ? |
||
joe Profil |
#18 · Zasláno: 18. 4. 2011, 14:39:41
$("#cart tr .remove input").click(function() { var orderCode = $(this).val(); $.ajax({ type: "GET", url: "cart_action.php?removeId=" + orderCode, //data: "remove[]=" + orderCode, success: function(payload) { $("#cart tr .remove input[value=" + orderCode + "]").parent().parent().fadeOut(500, function() { $(this).remove(); //calcPrice(); }); $("#cart span.price").val(payload.price); // takto aktualizuješ cenu (#cart span.price je element, kde máš cenu; do price si ji v PHP uložíš) }, error: function() { window.location("cart_action.php?remove[]="+orderCode); } }); }); Pokud klikneš na tlačítko, že chceš smazat produkt s ID = 124, adresa bude (třeba) cart_action.php?removeId=124 Na téhle adrese smažeš ze sessions (jsou uložené na serveru) položku s ID 124 z košíku, přepočítáš cenu - NA SERVERU a vypíšeš nějaký text ve tvaru (třeba) JSON, jak jsem psal nahoře. $("#cart tr .quantity input").change(function() {... Takhle ne. Přidej si tam tlačítko, buď vedle inputu a bude u každé položky a nebo až pod nimi s textem "Přepočítat cenu". Pak to bude podobné jako ten kód pro odstranění, s tim, že musíš projít všechny řádky a dát PHP vědět, jaké ID má jaký počet položek. Vše ostatní zase vyřešíš až v PHP. Tohle smazat celý. function calcPrice() { |
||
rad Profil * |
#19 · Zasláno: 18. 4. 2011, 16:46:23
Diky moc ale takhle prijdu vlastne o to co jsem chtel aby se to mohlo menit i bez toho abych mackal nejake tlacitko .
|
||
joe Profil |
#20 · Zasláno: 18. 4. 2011, 16:49:06
rad:
„takhle prijdu vlastne o to co jsem chtel aby se to mohlo menit i bez toho abych mackal nejake tlacitko“ To sice přijdeš, ale měnit něco "pod rukama" není zrovna dobrý nápad. Pokud to tam opravdu chceš mít, tak si to tam snad už dokážeš dodělat, není to problém, ale dej tam aspoň nějakou rezervu před tím, než tu cenu přepočítáš (třeba 2s) |
||
Časová prodleva: 13 let
|
0