Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2018, 07:13
Новичок на форуме
Отправить личное сообщение для artem_L Посмотреть профиль Найти все сообщения от artem_L
 
Регистрация: 13.09.2017
Сообщений: 9

Изменение кнопки "Купить" на "Товар уже в корзине"
Добрый день.
В общем, долблюсь уже третий день - не могу решить простую задачку. Есть интернет магазин. С помощью ajax и php/mysql при нажатии на кнопку "Купить" товар добавляется в корзину. Все работает. Только кнопка купить не меняется (естественно)... Кнопки добавляются скриптом, поэтому айдишники у всех одинаковые. На сколько понимаю, нужно отследить добавление товара в корзину -> узнать его айди -> переслать обработчику, что бы тот изменил кнопку. Но так как я чайник, не могу додумать как это все сделать.
Может, я не правильно мыслю. Подскажите, плиз.


//добавление товаров в корзину

$('#add-cart-style-list,#add-cart-style-grid,#add-cart,.add-cart,#add-cart-view,#random-add-cart').click(function(){

var tid = $(this).attr("tid");

$.ajax({
type: "POST",
url: "PHP/addtocart.php",
data: "id="+tid,
dataType: "html",
cache: false,
success: function(data) {
loadcart();
}
});

});

function loadcart(){
$.ajax({
type: "POST",
url: "PHP/loadcart.php",
dataType: "html",
cache: false,
success: function(data) {

if (data == "0")
{

$("#basket").html("<img src='images/commerce.png'>&nbsp;Корзина пуста");


}else
{
$("#basket").html('<img src="images/commerce.png">&nbsp;'+data);

}


}
});

}
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2018, 07:32
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

artem_L,
Покажите пример вашего html
Ответить с цитированием
  #3 (permalink)  
Старый 07.06.2018, 07:35
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

Может, сразу по клику и менять?

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8">
	<title>Пример</title>
	<script
	src="https://code.jquery.com/jquery-3.3.1.min.js"
	integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
	crossorigin="anonymous"></script>
</head>
<body>
	<button id="add-cart-style-list">Купить</button>
	<script>
		$('#add-cart-style-list').click(function(e){
			e.target.innerHTML = 'В корзине';
		});
	</script>
</body>
</html>


А потом сохранить в локальное хранилище и читать при загрузке?

load: function(){
		if(localStorage.getItem('buy') != undefined){
			buy = JSON.parse(localStorage.getItem('buy'));
		}
		return this;
	},
	save: function(){
		localStorage.setItem('buy', JSON.stringify(buy));
	}


Не знаю - как вариант...
Ответить с цитированием
  #4 (permalink)  
Старый 07.06.2018, 08:14
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

void(),
У ТС вроде как ко всему еще и id одинаковые. Зат вроде где-то есть уникальный (относительно уникальный?) tid товара
Ответить с цитированием
  #5 (permalink)  
Старый 07.06.2018, 16:51
Новичок на форуме
Отправить личное сообщение для artem_L Посмотреть профиль Найти все сообщения от artem_L
 
Регистрация: 13.09.2017
Сообщений: 9

Да, это переменная с id товара. Получаем с помощью РНР и использую еще и с помощью ajax. Ну, такое в общем )) Понимаю, что костыли, но пока только так получается.
Кстати, уже думал. Если я добавлю к айдишнику товаров эту переменную, что бы id изменялось вместе с айди товара (например #style-list24). Как можно получить доступ к такому айди через функцию, что б при нажатии менялась именно нужная мне кнопка?
Ответить с цитированием
  #6 (permalink)  
Старый 07.06.2018, 16:58
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,815

Сообщение от artem_L
Кнопки добавляются скриптом, поэтому айдишники у всех одинаковые.
Интересно, почему было выбрано такое "гениальное" решение по поводу размещения кнопок на странице?
Почему не генерировать кнопки сервером?
На клиенте останется только изменить надпись на кнопке по успешному добавлению товара в корзину.
Ответить с цитированием
  #7 (permalink)  
Старый 07.06.2018, 18:20
Новичок на форуме
Отправить личное сообщение для artem_L Посмотреть профиль Найти все сообщения от artem_L
 
Регистрация: 13.09.2017
Сообщений: 9

Ну, тут ответ прост - я полный чайник. Решил сделать что-то крупное, что б в процессе научится. Вот и наткнулся на видео уроки по созданию интернет магазина. Что б было интереснее - многие вещи делаю под себя. Там была такая генерация кнопок для каждого товара через рнр. Там по клика кнопка не меняется, и я решил переделать что б было как у людей. Сам додуматься не смог, поэтому пришел за помощью к вам. Если покажете на примере как можно было сделать - я с радостью изучу ваш метод и переработаю свой скрипт.
Ответить с цитированием
  #8 (permalink)  
Старый 07.06.2018, 18:22
Новичок на форуме
Отправить личное сообщение для artem_L Посмотреть профиль Найти все сообщения от artem_L
 
Регистрация: 13.09.2017
Сообщений: 9

Да что там пример. Магазин на сервере в интернете. Сайт: prima-vera.com.ua
Ответить с цитированием
  #9 (permalink)  
Старый 07.06.2018, 19:15
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

Жестоко. Я может чего-то не понимаю. Но есть же обработчик клика на кнопках, иначе товары бы не добавлялись в корзину. Можно получить текущую кнопку, на которую нажали с помощью e.target. А затем просто взять атрибут tid.

Вот этот код прекрасно работает:

$('.btn-primary').click(function(e){
	e.target.innerHTML = 'В корзине';
	alert(e.target.getAttribute('tid')); 
});


Этот код:
1. меняет надпись на кнопке
2. получает уникальный tid товара.

Далее имеющийся уже tid нужно сохранить в локальное хранилище. И при загрузке страницы - загружать его. Как примерно сохранять и загружать, я уже приводил выше фрагмент.

Теперь осталось найти кнопку по tid.

1. После загрузки страницы window.onload = function(){};
2. Получаем в переменную все кнопки var $buttons = $('.btn-primary');
3. И в цикле ищем где-то так:

for(var i = 0; i < $buttons.length; i++){
	if( $buttons.getAttribute('tid') ==  tid){
$buttons[i].innerHTML = 'В корзине' // вот она искомая кнопка - $buttons[i]
}
}


Еще, после отмены покупки товара или при совершении покупки, нужно очистить локальное хранилище.

Последний раз редактировалось void(), 07.06.2018 в 19:25.
Ответить с цитированием
  #10 (permalink)  
Старый 07.06.2018, 19:27
Новичок на форуме
Отправить личное сообщение для artem_L Посмотреть профиль Найти все сообщения от artem_L
 
Регистрация: 13.09.2017
Сообщений: 9

Ого. Круто. Сейчас буду вникать в эти все функции и пришивать к своему скрипту. Спасибо огромное.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать событие уже отмеченной radio кнопки? cha0s jQuery 1 09.05.2014 13:48
Изменение вкладок ui tabs по нажатию кнопки назад в браузере martinss jQuery 0 15.01.2014 12:46
Изменение фрейма по нажатии кнопки. informa Элементы интерфейса 5 17.06.2013 12:53
Изменение цвета кнопки при активном поле paradox989 jQuery 7 08.06.2013 10:08
изменение размера кнопки student2011 Общие вопросы Javascript 6 09.01.2011 20:14