Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.05.2016, 20:46
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Это все понимаю, но в javascript я полный ноль. Получение данных их data-price также как document.getElementsByClassName? Кстати говоря ID товара я изначально не знаю.
Ответить с цитированием
  #12 (permalink)  
Старый 14.05.2016, 01:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вам и не нужно знать ID товара, вам нужно оперировать ID, точно также как и ценой. Добавление товара в корзину, это как раз поместить в нее ID товара и его количество, цена товара при этом в корзине может и отсутствовать.

У вас прописано onclick="return cart.add(this)", то есть в функцию передается ссылка на сам объект, что в самой функции будет ее аргументом. Вот этот аргумент и хранит все свои атрибуты, которые и нужно получать, и которые в скрипте думаю получают (ID товара). Использовать document.getElementsByClassName и прочее нет необходимости, как и совсем не понятно к чему приляпан return.

Вы функцию эту хотя бы по коду нашли и показали.
Ответить с цитированием
  #13 (permalink)  
Старый 14.05.2016, 10:29
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Теперь совсем запутался. Дело в тос, что если я не использую onclick="return cart.add(this)", то при нажатии на кнопку "Купить" происходит переадресация в корзину, чего очень не хотелось бы. А вот сам скрипт отмены переадресации и добавления товара в корзину.
script>
var cart = {};
$(document).ready(function(){
cart.add = function(btn) {
                    var $btn = $(btn);
                    var productId = $btn.data('id');
                    $.get('/cart?add=' + productId, function() {
                    });
                    return false;
                };
});</script
>
Ответить с цитированием
  #14 (permalink)  
Старый 14.05.2016, 10:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну если используется jQuery, то в thml:

<a data-id="633" data-price="тут_цена_товара" class="buy-now" onclick="return cart.add(this)">Купить</a>

Цена указанная в DIV только для информации пользователю.

В JS:

$(document).ready(function(){
все касаемо функции cart.add выбросить, ну или тогда уж ООП и методы
};

и так:

$(document).ready(function(){
    $('a[data-id]').click(function(e) {
        e.preventDefault(); //только если кнопка имеет атрибут href, иначе не надо
        var b = $(this);
        $.get('/cart?add=' + b.data('id'), function(data) {
            //если после ответа сервера нужно считать сумму набранного,
            //то цена этого товара = +b.data('price')     
        });
        //а если посчитать не дожидаясь ответа, то все равно цена, это +b.data('price')
        //считайте на здоровье, собственно и сервер мог бы готовый расчет вернуть 
        //в зависимости от того, добавлен или нет товар в корзину, 
        //а серверу не нужна цена от клиента, он ее знает сам      
    });
});

Последний раз редактировалось laimas, 14.05.2016 в 15:02.
Ответить с цитированием
  #15 (permalink)  
Старый 14.05.2016, 19:23
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Жаль, но не получилось
Ответить с цитированием
  #16 (permalink)  
Старый 14.05.2016, 20:56
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Получилось следующее:
<div class="product-basket"></div>
<div class="product1">
<div class="price">100</div>
<a data-id="633" class="buy-now" onclick="return cart.add(this)" onmousedown="add(this)">Купить</a>
</div>
<div class="product2">
<div class="price">200</div>
<a data-id="632" class="buy-now" onclick="return cart.add(this)" onmousedown="add(this)">Купить</a>
</div>
<script>
    function add(elem) {
        var res = document.getElementsByClassName('product-basket')[0],
            price = parseInt(document.getElementsByClassName('price')[0].innerHTML),
            sum = parseInt(res.innerHTML) | 0;
        res.innerHTML = sum + price;
          }
</script>

Так как без onclick="return cart.add(this)" я обойтись не могу, пришлось добавить еще одно событие onmousedown. Считает... Но сумму берет только из первого
Ответить с цитированием
  #17 (permalink)  
Старый 15.05.2016, 10:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Янковиц
Так как без onclick="return cart.add(this)" я обойтись не могу
Вы занимаетесь хренью, и хотя бы показывали, чего сделано было и что не получилось. Где это?

Поместите на любую свою страницу имеющую прокрутку по вертикали в самый ее низ вот такое:

<a>GO</a>

Первое - это уже не ссылка, и курсор у тега А будет "по умолчанию", и второе - щелкните по этой "ссылке". Все правильно, даже не дергается. Все правильно, нет у этой "ссылки" действия по умолчанию, а значит и вашим "ссылкам" return cart.add(this) и функции return false; как мертвому припарка.

Показывайте то что пытались сделать, и три вопроса:

1) есть ли у блоков <div class="product1"> ... </div> и т.д. общий ближайший родитель, но не body?

2) на чем базируется корзина на сервере - сессия, база или иное?

3) какова структура корзины и каков механизм добавления товаров в нее?
Ответить с цитированием
  #18 (permalink)  
Старый 15.05.2016, 15:47
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Laimas, не ругайтесь пожалуйста. Вам php код нужен? Понимаете, работа корзины уже прекрасно работает. Все считает, передаёт данные покупок в бд, оформляет заказ. Мне лишь нужно простой скрипт для front-end, чтобы команда выполнялась на стороне клиента а не сервера. То есть, чтобы кликая на ссылку, скрипт мог вывести сумму в отдельном месте. Все, остальное не нужно.
У блоков div есть родительский блок, это блок div class="parent".
Ответить с цитированием
  #19 (permalink)  
Старый 15.05.2016, 16:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А кто сказал что я ругаюсь? Я лишь говорю, что вы занимаетесь хрен знает чем?

Сообщение от Янковиц
Жаль, но не получилось
Что именно, где код попытки сделать? Вам что по каждому новому поводу что либо пояснять?

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

И уж коли ваша корзина "все считает", то сумму товаров в корзине ей раз плюнуть вернуть клиенту в ответ на запрос, а клиенту его показать, вот тут:

$.get('/cart?add=' + b.data('id'), function(data) {
            //в data ответ сервера - сумма товаров в корзине
            $('.product-basket').tetx(data)    
        });
Ответить с цитированием
  #20 (permalink)  
Старый 15.05.2016, 21:02
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Цитата:
И уж коли ваша корзина "все считает", то сумму товаров в корзине ей раз плюнуть вернуть клиенту в ответ на запрос, а клиенту его показать
Да, это так, но разве это не создаст дополнительную нагрузку на сервер? А если клиент будет 10 раз добавлять новы товар. Опять взаимодействие с сервером? А если у меня 10 или 100 таких клиентов?

Последний раз редактировалось Янковиц, 15.05.2016 в 21:06.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор случайных чисел (помогите с задачкой) GentleGoose Общие вопросы Javascript 2 28.07.2014 12:53
НОД более чем 2-х чисел Demath Общие вопросы Javascript 4 06.01.2013 05:27
Опять про округление чисел Kefir Общие вопросы Javascript 3 10.01.2012 15:34
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Работа с последовательностью натуральных чисел Stillife Общие вопросы Javascript 1 18.05.2011 20:03