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
rad:
Počítat normálně a formátovat až při výstupu.
Segi_L
Profil
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
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 *
protoze je tam ajax a javascript proste nepocita s carkou
joe
Profil
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 *
samozrejme ze ji pocitam pomoci php akorat se mi proste nezobrazi - na serveru nic nemam mam to v session
joe
Profil
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 *
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 *
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 *
presto pro ted nemohl bys mi poradit jak na to s tim kodem co je uz hotov ?
joe
Profil
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íš.
rad
Profil *
pridavani na ajaxu nefunguje to je prave to.
joe
Profil
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 *
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 +" &euro;");
$("#total_price").html("TOTAL " + totalPrice +" &euro;" );
});
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 *
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 +" &euro;"); 
		$("#total_price").html("TOTAL " + totalPrice +" &euro;" );
	});
	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
    $("#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 *
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
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)

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: