13.05.2016, 20:46
|
Профессор
|
|
Регистрация: 17.11.2014
Сообщений: 403
|
|
Это все понимаю, но в javascript я полный ноль. Получение данных их data-price также как document.getElementsByClassName? Кстати говоря ID товара я изначально не знаю.
|
|
14.05.2016, 01:40
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Вам и не нужно знать ID товара, вам нужно оперировать ID, точно также как и ценой. Добавление товара в корзину, это как раз поместить в нее ID товара и его количество, цена товара при этом в корзине может и отсутствовать.
У вас прописано onclick="return cart.add(this)", то есть в функцию передается ссылка на сам объект, что в самой функции будет ее аргументом. Вот этот аргумент и хранит все свои атрибуты, которые и нужно получать, и которые в скрипте думаю получают (ID товара). Использовать document.getElementsByClassName и прочее нет необходимости, как и совсем не понятно к чему приляпан return.
Вы функцию эту хотя бы по коду нашли и показали.
|
|
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.05.2016, 10:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну если используется 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.
|
|
14.05.2016, 19:23
|
Профессор
|
|
Регистрация: 17.11.2014
Сообщений: 403
|
|
Жаль, но не получилось
|
|
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. Считает... Но сумму берет только из первого
|
|
15.05.2016, 10:00
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Янковиц
|
Так как без onclick="return cart.add(this)" я обойтись не могу
|
Вы занимаетесь хренью, и хотя бы показывали, чего сделано было и что не получилось. Где это?
Поместите на любую свою страницу имеющую прокрутку по вертикали в самый ее низ вот такое:
<a>GO</a>
Первое - это уже не ссылка, и курсор у тега А будет "по умолчанию", и второе - щелкните по этой "ссылке". Все правильно, даже не дергается. Все правильно, нет у этой "ссылки" действия по умолчанию, а значит и вашим "ссылкам" return cart.add(this) и функции return false; как мертвому припарка.
Показывайте то что пытались сделать, и три вопроса:
1) есть ли у блоков <div class="product1"> ... </div> и т.д. общий ближайший родитель, но не body?
2) на чем базируется корзина на сервере - сессия, база или иное?
3) какова структура корзины и каков механизм добавления товаров в нее?
|
|
15.05.2016, 15:47
|
Профессор
|
|
Регистрация: 17.11.2014
Сообщений: 403
|
|
Laimas, не ругайтесь пожалуйста. Вам php код нужен? Понимаете, работа корзины уже прекрасно работает. Все считает, передаёт данные покупок в бд, оформляет заказ. Мне лишь нужно простой скрипт для front-end, чтобы команда выполнялась на стороне клиента а не сервера. То есть, чтобы кликая на ссылку, скрипт мог вывести сумму в отдельном месте. Все, остальное не нужно.
У блоков div есть родительский блок, это блок div class="parent".
|
|
15.05.2016, 16:51
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А кто сказал что я ругаюсь? Я лишь говорю, что вы занимаетесь хрен знает чем?
Сообщение от Янковиц
|
Жаль, но не получилось
|
Что именно, где код попытки сделать? Вам что по каждому новому поводу что либо пояснять?
работа корзины уже прекрасно работает. Все считает, передаёт данные покупок в бд, оформляет заказ. - я уже говорил, что если сервер все считает, и добавление товара в корзину, это асинхронный запрос сервера, то считать на клиенте, это не есть необходимость, ибо нормальная корзина прежде чем добавить товар, проверит, есть ли такой в базе, и есть ли в наличии.
И уж коли ваша корзина "все считает", то сумму товаров в корзине ей раз плюнуть вернуть клиенту в ответ на запрос, а клиенту его показать, вот тут:
$.get('/cart?add=' + b.data('id'), function(data) {
//в data ответ сервера - сумма товаров в корзине
$('.product-basket').tetx(data)
});
|
|
15.05.2016, 21:02
|
Профессор
|
|
Регистрация: 17.11.2014
Сообщений: 403
|
|
Цитата:
|
И уж коли ваша корзина "все считает", то сумму товаров в корзине ей раз плюнуть вернуть клиенту в ответ на запрос, а клиенту его показать
|
Да, это так, но разве это не создаст дополнительную нагрузку на сервер? А если клиент будет 10 раз добавлять новы товар. Опять взаимодействие с сервером? А если у меня 10 или 100 таких клиентов?
Последний раз редактировалось Янковиц, 15.05.2016 в 21:06.
|
|
|
|