Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Помогите с .each() (https://javascript.ru/forum/jquery/10417-pomogite-s-each.html)

InviS 04.07.2010 02:59

Помогите с .each()
 
Подскажите, пожалуйста... Делаю корзину.. можно изменять количество товаров, от этого изменится и стоимость общая.. Мне нужно подсчитать итоговую стоимость. Вот скриншот:

Вот моя функция обработки и вывода значений:
function GetPrice(){
	var total=0;
	$(".price span").each(function(i){
		total+=parseFloat($(this).text());
		//alert($(this).text());
	});
	$(".total").text("Всего: "+total+" грн.");
}

.price span - это span с ценой каждого товара в отдельности
.total - куда вставлять текст буду

Но это все правильно работает один раз.. Если ставлю в обработчик .keyup input-ов, то все перестает работать... Точнее верно работать.. А стоимость постепенно снижается к нулю, что бы я не вводил. Причем я заметил:
первый раз все нормально считывается и пишет результат
в следующие разы оно проходит на одну сумму меньше, начиная со 2ой, 3ей, 4ой... последней... И в конце концов выдает всегда 8....

Что не так.. помогите, пожалуйста!

sysya 04.07.2010 04:49

Цитата:

Если ставлю в обработчик .keyup input-ов, то все перестает работать...
Код который в keyup давайте тоже

x-yuri 04.07.2010 10:11

alert уже не модно, сейчас используют console.log (firefox, firebug) ;)
и что, console.log($(".price span").length) с каждым запуском уменьшается?

InviS 04.07.2010 12:25

Полный код JS
 
Цитата:

Сообщение от sysya (Сообщение 62106)
Код который в keyup давайте тоже

function GetPrice(){
	var total=0;
	$(".price span").each(function(i){
		total+=parseFloat($(this).text());
		//alert($(this).text());
	});
	$(".total").text("Всего: "+total+" грн.");
}

$(function(){
	$(".delete a").click(function(event){
		event.preventDefault();
		var product_id=$(this).attr("href");
		$.get("ajax.php",{q : "basket", action : "delete", product_id : product_id}, function(data){
			window.location.reload();
		});
	});
	
	$(".p_amount").keyup(function(){
		var p = $(this);
		var product_id=$(this).attr("id");
		var amount=$(this).val();
		var amount_pattern=/^[\d]{0,}$/;
		if ((amount_pattern.test(amount)==false || amount==0) && amount!=""){
			$(this).val(1);
			amount=1;
		}
		$.get("ajax.php",{q : "basket", action : "get_price", product_id : product_id, amount : amount}, function(data){
			p.parent().next().html(data);
		});
		GetPrice();
	});
	
	$(".p_amount").change(function(){
		if ($(this).val()==""){
			$(this).val(1);
			$(this).keyup();
		}
	});
});

sysya 07.07.2010 14:12

Очень интересно, не смог найти ничего и разобраться. Может кто ещё поможет. Не хотелось ба на такой же какахе споткнуться...

InviS 07.07.2010 14:26

Ага, фигня какая-то... Я так и не разобрался почему .each работает странно... Решил проблему пересчитыванием суммы заказа на стороне сервера и возвращении ответа вместе с стоимостью товара в формате json... Но возможно же как-то подсчитать на стороне клиента...?

Kolyaj 07.07.2010 14:30

Ошибка в подходе. Данные нужно хранить в памяти, а не на странице. На странице они показываются. В данном случае, следовательно, должен быть массив, в котором хранится товар, количество, цена за штуку. Из этих данных уже формируется то, что надо показать на странице.

x-yuri 07.07.2010 15:58

Цитата:

Сообщение от InviS
Я так и не разобрался почему .each работает странно...

печально, качай скилл отладки ;)

sysya 07.07.2010 16:28

Цитата:

Сообщение от Kolyaj (Сообщение 62607)
Ошибка в подходе. Данные нужно хранить в памяти, а не на странице. На странице они показываются. В данном случае, следовательно, должен быть массив, в котором хранится товар, количество, цена за штуку. Из этих данных уже формируется то, что надо показать на странице.

кстати на счёт памяти, есть такая штука в jquery - $.data() http://slyweb.ru/jquerydoc/jQuery-data-elem-name.php
Или в куках хранить...


Часовой пояс GMT +3, время: 14:42.