Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Калькуляция значений ячеек
 
 автор: darkozoid   (12.08.2013 в 10:12)   письмо автору
 
 

Доброго дня всем, и удачной недели..
У меня есть вопрос, на который я получаю ответ NaN =0)

Есть таблица, в ней ячейки (class='cart_price') с цифрами (допустим ячеек 5)

и есть див, куда надо вписать сумму этих цифр ( #all_price)


$('.cart_price').each(function(all){
        var all = $('#all_price span').html();
        var now = $(this).html();
        all = parseFloat(all);
        now = parseFloat(now);
        $('#all_price').html(all);


как это сделать правильно?

  Ответить  
 
 автор: darkozoid   (12.08.2013 в 10:52)   письмо автору
 
   для: darkozoid   (12.08.2013 в 10:12)
 

Все. Уже разобрался, прошу прощения за отнятое время...
вот на всякий случай выложу, то что получилось...

Может и не очень корректный код, но работает


// Общая сумма заказа
    function calculate(){
        var tmp = 0;
        $('.cart_price').each(function(all){
            //var all = $('#all_price span').html();
            var now = $(this).html();
            tmp = parseInt(tmp);
            now = parseInt(now);
            tmp = tmp+now;
            $('#all_price span').html(tmp);
        });
    }
    calculate();

  Ответить  
 
 автор: confirm   (12.08.2013 в 13:22)   письмо автору
 
   для: darkozoid   (12.08.2013 в 10:52)
 

Если объявленная переменная Number (tmp), то зачем parseInt(tmp)?
Зачем постоянно обновлять значение суммы в цикле?

  Ответить  
 
 автор: darkozoid   (12.08.2013 в 16:54)   письмо автору
 
   для: confirm   (12.08.2013 в 13:22)
 

>Если объявленная переменная Number (tmp), то зачем parseInt(tmp)?
- это я в торопях... даже не подумал...
>Зачем постоянно обновлять значение суммы в цикле?
- а иначе у меня получается пустая переменная каждый раз

  Ответить  
 
 автор: confirm   (12.08.2013 в 17:25)   письмо автору
 
   для: darkozoid   (12.08.2013 в 16:54)
 

Для чего вы объявляете tmp? Она ведь у вас как раз и служит для накопления, а по окончанию цикла и будет равна сумме, а значит после цикла значение этой переменной и нужно занести в all_price span. Таким образом вы всего один раз "побеспокоите" объект, что немаловажно.
Идентификатор объекта значение уникальное, а вот имя класса может быть одним и тем же у самых различных объектов, включая и вложенные. Поэтому, заставляя искать объекты по классу, ограничивайте границы поиска, указывая не только класс, но и тег вас интересующий.
function calculate(){ 
    var tmp = 0; 
    $('TAGNAME.cart_price').each(function() { tmp += parseInt($(this).text()); });
    $('#all_price span').text(tmp); 
}


cart_price - речь о корзине? Тогда почему источниками являются ячейки таблицы?

  Ответить  
 
 автор: darkozoid   (13.08.2013 в 09:34)   письмо автору
 
   для: confirm   (12.08.2013 в 17:25)
 

>Идентификатор объекта значение уникальное, а вот имя класса может быть одним и тем же у самых различных объектов, включая и вложенные....
Это понятно, но этот класс присвоен только нужным мне объектам, так что тут все нормально

>cart_price - речь о корзине? Тогда почему источниками являются ячейки таблицы?

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

  Ответить  
 
 автор: confirm   (13.08.2013 в 09:58)   письмо автору
 
   для: darkozoid   (13.08.2013 в 09:34)
 

Ничего вам непонятно, и ничего нормального у вашего "все" нет. Вы думаете, что jQuery настолько интеллектуален, что достаточно указать имя класса и он точно будет знать, что вы хотите получить именно элементы TD, которые находятся именно в таблице Х, которая уж точно находится по неким координатам на странице? Как бы не так, даже, если вы укажите искать именно в таблице, да еще по ее ID, элементы с этим классом, то он вынужден будет переворошить все ее элементы, то есть не только ячейки (TD), но и TR, и TBODY и т.д. Чтобы получить объект по классу, он сперва найдет значение этого атрибута (класс), а только потом получит объект. Не заставляйте впустую выполнять кучи операций бесполезных - вот это вы должны понять.

Что касается корзины. Я буквально недавно уже говорил практически по такому же коду "аля корзина", что и у вас, повторю и вам - если вы под таблицей подразумеваете корзину, то это далеко от ее понятия, а говоря точно, нет у вас никакой корзины. А чтобы понять что такое корзина, хотя бы мысленно представьте себя в обычном магазине, и совершите в нем покупку. Вот как вы представите это, ваши действия, что нужно для того, чтобы вам было удобно совершать покупку, тогда и поймете что такое корзина. Корзина в переложении на онлайн магазин, это далеко не таблица.

  Ответить  
 
 автор: darkozoid   (19.08.2013 в 10:16)   письмо автору
 
   для: confirm   (13.08.2013 в 09:58)
 

>Ничего вам непонятно, и ничего нормального у вашего "все" нет. Вы думаете, что jQuery настолько интеллектуален, что достаточно указать имя класса и он точно будет знать, что вы хотите получить именно элементы TD, которые...
Ну а какая разница тогда, укажу я ID или класс? Все равно же будет ворошить все...


>Что касается корзины. .... А чтобы понять что такое корзина, хотя бы мысленно представьте себя в обычном магазине, и совершите в нем покупку...

Ну и что же это? Вот назовите мне те критерии, которым должна отвечать корзина в магазине?
Можно посмотреть что за товар в ней лежит - да
можно достать из нее товар и посмотреть его подробней - да
можно выложить его обратно или добавить еще - да...
посмотреть ценник - да...
Что еще то от корзины надо юзеру? ведь именно для него и создается корзина, мне то она не нужна... я вообще могу все аяксом в базу писать или отправлять менеджеру, но толку то...

  Ответить  
 
 автор: confirm   (19.08.2013 в 10:48)   письмо автору
 
   для: darkozoid   (19.08.2013 в 10:16)
 

>Ну а какая разница тогда, укажу я ID или класс?

Дело не в ID, я говорил о том, что даже, если вы обращаетесь к конкретной таблице, но не указываете, что искать в ней, то это лишняя работа. Неужели не понятно, что искать просто по классу, это значит искать ВСЕ, и если в таблице будут вложенные элементы, например, параграфы, списки и т.п., то будут проверяться и эти элементы, а если указать искать элементы по классу только среди нужного (ячеек в данном случае), то поиск будет производиться только среди указанных?
Неужели это, казалось бы очевидное и не требующее разъяснений, так трудно для понимания?
Запомните, что:
$('.classname')...
равноценно указанию
$('*.classname')... - искать все
И если вам не нужно все, то зачем же вы это делаете? Вы ведь даже и о таблице как таковой не заикаетесь в коде, то есть если ваша страница имеет несколько десятков, а может и сотни элементов на странице, то будут перелопачены все, впустую.

>можно выложить его обратно или добавить еще

А разве ваша таблица позволяет "выложить/добавить" (это в онлайн магазине называется редактированием) что-то в корзине? Если ваша таблица, это просто показать что в корзине, без возможности ее редактирования, то разве это корзина. Если ваш код имеет нечто навороченное (чего не видно), с помощью которого можно редактировать, то почему не форма, как инструмент для таких операций?

Вы путаете прилавок с корзиной - в корзине не смотрят на ценник, его там просто нет, в корзине указана цена на товар (и только в полном представлении онлайн корзины), а ценник, это может быть гораздо более обширная информация.

Представьте себя в магазине, и ваша тележка позволяет только класть в нее товар без возможности его убрать, вернуть на прилавок. Удобно ли будет совершать покупку в таком магазине? Ваша таблица как раз и есть такая корзина-тележка.

Представьте, что корзина нормальная, но добавление в нее товара и удаление его, обязывает вас бегать к кассе чтобы вам производили расчет ее стоимости. Неудобно? Выход - в магазине самообслуживание и расчет только при покупке у кассы, в онлайн - JS с обновлением после редактирования или Ajax с постоянным обновлением.

Представьте, что у вас в кармане N сумма, а покупаете вы тысячу мелочей, и вам надо считать сумму набранного, чтобы не превысить сумму в кармане. В тележке такого нет, хотя с помощью RFID меток обязательно будет доступен такой сервис, а в онлайн магазине нет и сейчас проблем - Ajax, и два представления корзины - краткое (количество товаров и их сумма) и полное. А полное, это как раз редактирование корзины, а это форма прежде всего, и возможностью перехода из корзины на прилавок (освежить информацию о товаре), и это взаимодействие двух представлений корзины, и многое другое, так как корзина может выполнять еще и многие другие задачи, включая и рекламные акции с целью привлечения покупателей.

Вы описываете какую-то таблицу, в которой что-то подсчитывается - для краткого представления корзины, это слишком громоздко в рамках страницы, для полного же представления никуда не годится.

  Ответить  
 
 автор: darkozoid   (19.08.2013 в 16:52)   письмо автору
 
   для: confirm   (19.08.2013 в 10:48)
 

> И если вам не нужно все, то зачем же вы это делаете? Вы ведь даже...

Вот теперь я понял о чем вы... теперь буду учитывать.

> А разве ваша таблица позволяет "выложить/добавить"...

Да моя корзина это позволяет, простои редактировать и просматривать и изменять, и все без перезагрузки...
Я уже решил проблему без подсчета ячеек, а другим способом.
Просто в силу своих весьма не богатых знаний, мне интересно было узнать как же это вообще можно сделать...

Тем не менее я не кое чего... Можно вас попросить написать список тех функций, которыми должна обладать корзина. (если не сложно)

У меня сейчас можно передвигаясь по сайту добавлять товар в корзину, и при этом всегда видно сколько товаров в ней и на какую сумму, а перейдя в саму корзину виден список выбранных товаров, стоимость каждого из них, есть ссылка на полное описание каждого товара, есть возможность удалить товар из корзины или изменить его количество, при этом общая сумма сразу будет пересчитана, при этом без перезагрузки страницы, и тут же есть краткая форма для отправки заказа... Все просто и быстро...
Понятное дело, что я не стал писать на форуме весь код... зачем? если мне надо было узнать только об одной возможности... я привел простой пример и все...
Что еще должно быть в функционале корзины?

  Ответить  
 
 автор: confirm   (19.08.2013 в 18:28)   письмо автору
 
   для: darkozoid   (19.08.2013 в 16:52)
 

Ну если есть возможность редактирования, то это корзина, вот только тот код, который вы выложили, ну просто не может иметь такой возможности, так как количество товара для этого должна содержать не ячейка таблицы, а поле INPUT формы. Причем, если это поле будет иметь тип number, то браузеры Opera и Chrome (а также иные на этом движке) будут отображать в этом поле и кнопки для изменения значения поля, что удобно при небольшом количественном изменении. А удалить товар, это уже checkbox. Кроме этого обязательно должна быть возможность полного удаления корзины, вы ведь можете в магазине все вернуть на витрину и удалится из него - передумали.

Функционал корзины, которым она должна обладать зависит от политики/стратегии/правил продаж в конкретном магазине. Это тоже самое, как ларек и супермаркет - вы же не ожидаете увидеть в ларьке тележку для товаров, и никто вам не разрешит ходить по ларьку, набирая товар в тележку, а в супермаркете это в порядке вещей. Вот так и в интернет магазине. Например, серверный код корзины будет зависеть уже от того как добавляется в нее товар - по одной штучке, или можно набирать произвольное количество одного и того же товара. Если можно добавлять по несколько штук товара, то и тут могут быть несколько возможных сценариев:
1) сколько бы вы не положили товара в корзину, вы гарантированно можете совершить покупку - магазин не указывает вам, что на складе товара всего N-штук, и либо разобьется, и достанет его, либо отправит вам количество по факту;
2) изначально сообщается, что товара на складе N-штук, и вы не можете положить в корзину более этого количества;
3) такая же ситуация как и 2), но кроме этого, учитывается и то, что кроме вас этот же товар в это же время добавляет в свою корзину другой покупатель, и тут могут быть два варианта:
а) если другой покупатель положил часть этого товара в свою корзину вперед вас, то вам эта часть этого товара уже не доступна;
б) независимо кто из вас первым добавляет товар в корзину, вам обеим доступно все его количество N, но товар достанется только тому, кто первый оформит заказ (фактически совершит покупку) - корзина при этом должна учитывать эту ситуацию, сбрасывая этот товар в корзине до оставшегося количества (или вообще удаления) с выдачей информации покупателю.

В реальном магазине вы можете даже носить с собой компьютер, просчитывать все на нем, и говорить кассиру "я уже все посчитал". С вами спорить не будут, но все таки кассир пересчитает, и только после этого выдаст вам чек, и вы сможете законно покинуть магазин с покупкой. В интернет магазине кассиром безусловно является сервер - сколь надежно вы бы не считали все на клиенте, сервер обязательно должен проверить все. А эта казалось бы естественная и однозначная операция может иметь тем не менее несколько вариантов решения, которые опять таки зависят от того, какова политика продаж у магазина. Ну и как минимум два возможных решения это может иметь чисто с технической точки зрения.

Краткое представление корзины ведь тоже может быть самостоятельным объектом на странице, а может быть дополнением к полному представлению корзины - щелчок по кнопке "Редактировать корзину..." и краткое представление расширяется до полного, где краткое становится элементом "Итого..." полного представления.

Магазин может и не писать на страницах товаров "нет на складе" - нет, а чего показывать тогда? Как реклама? Возможно. А еще лучше, если такой товар будет иметь не "нет на складе", а кнопочку "Заказать" или "Сделать заявку". В этом случае это может быть как дополнительная корзина (корзина заявок), или одна корзина и для текущей покупки, и для заявок, но с учетом категории покупка/заявка, то есть товары для заявки, это отложенная покупка своего рода. Это в свою очередь и некий механизм добавочный на сервере, при чем по условию, например, можно продавать всем, а отложенная покупка только зарегестрированным пользователям.

Сама корзина, это либо сессия, либо cookie. Оба эти способа хранения имеют плюсы и минусы, и каждый из них может иметь не одно решение, которое будет обыгрывать его плюсы. А в случае отложенной покупки, это хранение заявки, а заявка не может храниться вечно, например, по обстоятельствам не зависящим от магазина. А это тоже должна отображать корзина.

И можно еще долго продолжать, описывая, что может "уметь" корзина, но вся эта писанина будет напрасной. Все требования к корзине определяются продавцом, его политикой. Что должна при этом уметь корзина определяет тоже магазин, но и разработчик тоже, так как он гораздо более сведущ в том, как и какими элементами при указанных требованиях удобно будет сделать интерфейс корзины. А дополнительную информацию к тому "что еще должна иметь корзина" дает посещение как реальных, так и виртуальных магазинов - и думать как обеспечить легкость и удобство выбора товара, доступность информации по всем возникающим вопросам, то есть то, что делает покупку легкой и приятной.

  Ответить  
 
 автор: thisismy   (21.08.2013 в 00:46)   письмо автору
 
   для: confirm   (19.08.2013 в 18:28)
 

Осмелюсь посмотрить с мнением confirm. Вот пример магазина, где корзина выглядит, как таблица: http://mir-apple.ru/
Добавьте в корзину несколько товаров ради теста и загляните в корзину.
И удаление товара в данной корзине неудобней чекбоксов?
Да и зачем удялять все из корзины, если передумали покупать? Просто закрыли браузер и все дела. Или не закрыли, а идете куда-то дальше.
Что самое интересное: вы пишите. что "Функционал корзины, которым она должна обладать зависит от политики/стратегии/правил продаж в конкретном магазине". И тут же навязываете человеку свое представление о функционале, говоря, что в табличке корзина не корзина вовсе. А вопрос-то был совсем не об этом. Человеку нужно было лишь узнать, как пересчитать значения в табличке...

  Ответить  
 
 автор: confirm   (21.08.2013 в 06:15)   письмо автору
 
   для: thisismy   (21.08.2013 в 00:46)
 

Учитесь читать код - HTML, Javascript. Изучайте HTML, DOM. Вот когда начнете разбираться в этом хотя бы на среднем уровне, вот тогда и начинайте полемику по поводу корзины без формы. Даете ссылку, выдвигаете аргументы, совсем не понимая того, что же там за корзина по ссылке.

Спорить с чьим либо мнением можно, но была бы основа, иначе это впустую молотить языком, и что самое интересное, вы даже не понимаете сути написанного, а затеваете спор.

  Ответить  
 
 автор: darkozoid   (09.09.2013 в 11:14)   письмо автору
 
   для: thisismy   (21.08.2013 в 00:46)
 

Так... всем большое спасибо за комментарии, разъяснения и советы.

но все уже давно сделано и сдано.
Суть была даже не в том как посчитать ячейки, а просто в том, как посчитать данные из таблицы, и что это за таблица - не имело большого значения.

Но все равно большое спасибо. Я учту все ваши рекомендации в будущем.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования