Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скрытие элемента (https://javascript.ru/forum/misc/79239-skrytie-ehlementa.html)

_marisha 13.01.2020 07:23

Скрытие элемента
 
Доброго времени суток!
В товаре есть кнопка "В корзину". При клике на данную кнопку кнопка переименовывается на "В корзине".
Необходимо ниже данной кнопки добавить кнопку "Покупка в кредит" и чтобы при клике на данную кнопку не появлялась вторая кнопка "В корзине".
На данный момент при клике на кнопку "Покупка в кредит" добавляется товар в корзину и данная кнопка меняется на надпись "В корзине", те. кнопка "В корзине" дублируется https://prnt.sc/qmu7n4
Код кнопки:
<div class="row columnRow">
                <a href="#" class="addCart addCartCredit changeID changeQty changeCart" data-id="<?=$arResult["ID"]?>" data-quantity="<?=$arResult["EXTRA_SETTINGS"]["BASKET_STEP"]?>">
                    <img src="<?=SITE_TEMPLATE_PATH?>/images/Осн_new.png" alt="<?=GetMessage("CREDIT_BEZ_PEREPLAT")?>" class="icon"><?//=GetMessage("CREDIT_BEZ_PEREPLAT")?>
                    <?if (isset($arResult["PRICE"]["DISCOUNT_PRICE"])):?>
                        от <?=CCurrencyLang::CurrencyFormat($arResult["PRICE"]["DISCOUNT_PRICE"], $arResult["EXTRA_SETTINGS"]["CURRENCY"], true)?> в месяц
                    <?else:?>
                        <?=CCurrencyLang::CurrencyFormat($arResult["PRICE"]["RESULT_PRICE"]["BASE_PRICE"], $arResult["EXTRA_SETTINGS"]["CURRENCY"], true)?>
                    <?endif?>
                </a>
            </div>

Если кнопке добавить
onclick="style.display='none'"
, тогда после нажатия кнопка исчезает - так и нужно. Но если обновить страницу, тогда отображается две кнопки "В корзине" https://prnt.sc/qmu7n4

Подскажите, пожалуйста, каким образом скрыть кнопку после клика на неё и чтобы кнопка "В корзине" второй раз не отображалась? Спасибо.

_marisha 13.01.2020 07:34

Может возможно опираясь на класс addCartCredit по наличию данного класса у элемента при клике на него скрыть?

laimas 13.01.2020 07:48

Цитата:

Сообщение от _marisha
Может возможно опираясь на класс addCartCredit по наличию данного класса у элемента при клике на него скрыть?

То есть <a href="#" class="addCart... добавляет и просто, и по кредиту?

_marisha 13.01.2020 07:59

laimas, спасибо что откликнулись )
В простой кнопке(т.е. "В корзину") нет класса addCartCredit
<a href="#" class="addCart changeID changeQty changeCart disabled" data-id="<?=$arResult["ID"]?>" data-quantity="<?=$arResult["EXTRA_SETTINGS"]["BASKET_STEP"]?>"><img src="<?=SITE_TEMPLATE_PATH?>/images/incart.png" alt="<?=GetMessage("ADDCART_LABEL")?>" class="icon"><?=GetMessage("ADDCART_LABEL")?></a>

На данный момент у кнопки "Покупка в кредит" есть класс addCartCredit, которого нет в кнопке "В корзину".
Вот и думаю, может по наличию данного класса скрывать элемент.
Потому что данный класс есть как в кнопке "Покупка в кредит", так и в кнопке "В корзине", которая появляется (дублируется) после клика на "Покупка в кредит".
Можно сделать так onclick="this.remove();", тогда при клике на "Покупка в кредит" кнопка "В кредит" не отображается, но при обновлении страницы кнопка "В корзине" всё равно дублируется.

laimas 13.01.2020 08:09

Цитата:

Сообщение от _marisha
данный класс есть как в кнопке "Покупка в кредит", так и в кнопке "В корзине", которая появляется (дублируется) после клика на "Покупка в кредит".

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

_marisha 13.01.2020 08:57

laimas, изначально была одна кнопка "В корзинУ", после нажатия на которую товар добавляется в корзину и кнопка становится "В корзинЕ".
В связи с интеграцией покупки в кредит в товаре необходимо добавить кнопку "Покупка в кредит", которая также должна добавлять товар в корзину https://prnt.sc/qmup7e
Для этого просто была скопирована кнопка "В корзинУ" и добавлен класс addCartCredit для изменения стиля кнопки. Но при этом кнопка "В корзинЕ" дублируется.

Найден код:
var updateAddCartButton = function($currentElement){
	var $imageAfterLoad = $currentElement.find("img");
	$currentElement.text(LANG["ADDED_CART_SMALL"])
		.attr("href", SITE_DIR + "personal/cart/")
		.prepend($imageAfterLoad.attr("src", TEMPLATE_PATH + "/images/added.png"))
		.addClass("added");
};

Если его закомментировать, тогда после добавления товара в корзину кнопки "В корзинЕ" не появляются, вместо них отображаются кнопки "В корзинУ" и "Покупка в кредит".

laimas 13.01.2020 09:00

Цитата:

Сообщение от _marisha
Для этого просто была скопирована кнопка "В корзинУ" и добавлен класс addCartCredit для изменения стиля кнопки.

И это называется интеграцией? :D

_marisha 13.01.2020 09:01

Если сделать console.log($currentElement);, тогда в консоли выводится:
n.fn.init [a.addCart.changeID.changeQty.changeCart, context: a.addCart.changeID.changeQty.changeCart]

n.fn.init [a.addCart.addCartCredit.changeID.changeQty.changeCart, context: a.addCart.addCartCredit.changeID.changeQty.changeCart]

n.fn.init [a.addCart.changeID.changeQty.changeCart, context: a.addCart.changeID.changeQty.changeCart]

n.fn.init [a.addCart.addCartCredit.changeID.changeQty.changeCart, context: a.addCart.addCartCredit.changeID.changeQty.changeCart]

_marisha 13.01.2020 09:02

Цитата:

Сообщение от laimas (Сообщение 518669)
И это называется интеграцией? :D

- :) ну это один из этапов ;)

laimas 13.01.2020 09:03

_marisha, то есть вы вставили на страницу js код (показанный выше), который добавляет кнопку и запрос на добавление товара, а при этом анализа корзины не производится?

_marisha 13.01.2020 09:09

Цитата:

Сообщение от laimas (Сообщение 518672)
_marisha, то есть вы вставили на страницу js код (показанный выше), который добавляет кнопку и запрос на добавление товара, а при этом анализа корзины не производится?

- код уже есть. Могу приложить файл с 2379 строками

laimas 13.01.2020 09:15

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

Разберитесь с тем кто ведает контролем и станет понятно где искать проблему.

Malleys 13.01.2020 11:36

Цитата:

Сообщение от _marisha
<a href="#"

Вам нужно заменить на <button У вас там нет кнопок, но ссылки. Вам нужно исправить, поскольку на самом деле эти ссылки никуда не ведут, не открываются правильно в новой вкладке и они не нужны в закладках!

_marisha, при отрисовке кнопок на странице вам нужно проверить, есть ли товар в корзине, если есть, то писать «В корзине» (и возможно кнопка «убрать из корзины»), если нет, то показывать кнопки «В корзину» и «Покупка в кредит».

Цитата:

Сообщение от laimas
почему сервер упорно добавляет добавляет две кнопки?

Интересно, почему сервер вообще занимается кнопками?

laimas 14.01.2020 00:25

Цитата:

Сообщение от Malleys
Интересно, почему сервер вообще занимается кнопками?

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

Malleys 14.01.2020 03:37

Цитата:

Сообщение от laimas
Я это где-то написал?

Нет, но ваше «почему сервер упорно добавляет две кнопки» подразумевает, что сервер занимается кнопками.

Цитата:

Сообщение от laimas
Ну что ахинею нести

Давай посмотрим «ахинею» на реальных проектах...
  • rAthena. Привожу как пример, поскольку есть исходный код сервера. Заметь, сервер вообще не занимается тем, как должен выглядеть клиент. Сервер занимается состоянием игры, обрабатывает запросы от игроков, присылает клиентам положение игровых персонажей и пр. А клиент (например, на HTML5) основываясь на данных, полученных от сервера, рисует игру и изменяет интерфейс.
  • YouTube. Клиентом может быть и веб-страница, и приложение на телефоне и телевизоре, а сервер не занимается рисованием кнопочек и пр. элементов интерфейса, а данными — видео, плейлисты, текст комментариев, каналы и пользователи. (Благодаря этому возможен YouTube API при помощи которого ты можешь сделать свой клиент)

Не «ахинея», а реальная польза и разделение клиент и сервер!

Цитата:

Сообщение от laimas
Что и как у автора происходит не известно, но уж коли дубликаты

Либо клиент криво рисует кнопки, либо сервер неправильно обрабатывает данные... но увы, там всё намного запутанней запущено (PHP размазан по HTML, который размазан по PHP)

laimas 14.01.2020 05:31

Malleys, вы вообще писали полное веб приложение, то есть, включая сторону сервера и клиента? Такое впечатление, что вы занимаетесь чисто теорией, совсем не занимаясь практикой. Какое отношение к конкретной данной теме имеет отношение rAthena, YouTube, если тут речь о магазине и проблеме совсем не касающейся кто и как рисует?

Цитата:

Сообщение от Malleys
ваше «почему сервер упорно добавляет две кнопки» подразумевает, что сервер занимается кнопками

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

Остается разобраться кто тупит - сервер как партизан не отвечает о состоянии корзины, что не похоже, или клиент тупой, добавляет дубликат кнопки не спрашивая сервер о состоянии корзины, что должно быть, или спрашивает, но для проформы, что на 99% вероятно.

Вот и вся суть, разводить лабуду об играх, в которых может быть то-то и то-то, о ютюбах, к чему. :) Охота чем-то заняться, а не чем? Есть предложение подумать над идей, а вдруг ...

Malleys 14.01.2020 09:21

Цитата:

Сообщение от laimas
вы вообще писали полное веб приложение, то есть, включая сторону сервера и клиента? Такое впечатление, что вы занимаетесь чисто теорией, совсем не занимаясь практикой.

Цитата:

Сообщение от laimas
разводить лабуду об играх, в которых может быть то-то и то-то, о ютюбах, к чему.

Конечно же делал, вот именно поэтому и сразу вижу, что человек вообще не знает, что такое RPC и REST. Т. е. вместо того, чтобы отделить проблемы интерфейса клиента от проблем хранения данных на сервере, вы считаете совершенно нормальным «прибить гвоздями» клиент к серверу и тем самым закрыть возможность переносимости интерфейса на несколько платформ и улучшить масштабируемость за счет упрощения серверных компонентов. Даже если вам не важны другие платформы, вы закрываете возможность к разработкам новых версии интерфейса или возможностей на сервере (которое выльется в то, чтобы пошурундовать в копии «файла с 2379 строками» © _marisha, пост №11)

И вообще, шурундовать в «файле с 2379 строками», в котором PHP обмазан вокруг HTML, CSS, JavaScript, в которых могут быть ещё и вкрапления того самого PHP... Сколько вам нужно ещё там покопаться, чтобы понять, что REST — это не просто теория, а самая настоящая практика, которая избавит вас от этого кошмара!

Что меня ещё смутило, так это то, что используется <a href="#", а не что-то типа <a href="/add-to-cart.php?productId=4075" . Разве последнее не лучше подходит под PHP?

Цитата:

Сообщение от laimas
Но не тупо отдает, а занимаясь анализом - товар в корзине, значит html-строка относящаяся к кнопке (или ее содержание) выводится такой, товара нет в корзине, значит иная строка.

Это как раз таки задача клиента, причём тут сервер? Сервер должен заниматься в данном случае корзиной и товарами, а не кнопками. Вот, почитайте, должно помочь увидеть свет в конце норы — https://nvoulgaris.com/designing-a-r...shopping-cart/

Цитата:

Сообщение от laimas
разводить лабуду об играх, в которых может быть то-то и то-то, о ютюбах, к чему.

Там нет таких проблем с «намертво гвоздями прибитым» клиентом к серверу!

laimas 14.01.2020 09:37

Цитата:

Сообщение от Malleys
вы считаете совершенно нормальным «прибить гвоздями» клиент к серверу и тем самым закрыть возможность переносимости интерфейса на несколько платформ...
Это как раз таки задача клиента, причём тут сервер? Сервер должен заниматься в данном случае корзиной и товарами, а не кнопками.

Я говорил о том, что не тупо надо добавлять, а контролировать, а то что вы тут написали, так это ради пустой полемики. Несете какую-то хрень. В теме где явно нужно искать проблемы на севере, о чем и было мной сказано, ваша светлость начала мне нести пургу об Андроиде. Улыбнулся я и забыл, а те кто не теоретики растолковали чаду о Джумле (это я потом в теме прочел). И тут очередная пурга о REST и ... К чему, это как-то касается конкретно этой темы? Могу заключить пари, что к сайту из этой темы это отношения не имеет. Хватить мне лапшу на уши вешать о технологиях, платформах и прочем. :)

Malleys 14.01.2020 09:52

Цитата:

Сообщение от laimas
Несете какую-то хрень.

Какую? Если ты залетел, а потом стыдно признаться, кто виноват?

Цитата:

Сообщение от laimas
И тут очередная пурга о REST

Тебе пурга, мне радость, а кому-то радость в отхожем месте копаться, и ещё делать вид, что именно так и надо, и других тянуть и лучше ничего нет.

Цитата:

Сообщение от laimas
К чему, это как-то касается конкретно этой темы?

Люди должны знать о возможностях, а не так, что человек ничего кроме PHP и jQuery yже не видит... 2020 год, сколько уже можно это мусолить, как будто вам 60+ и вы уже ничего нового не способны выучить, мне 20+ и я таким не страдаю, что и вам советую.

laimas 14.01.2020 10:09

Цитата:

Сообщение от Malleys
Тебе пурга, мне радость

Вот то то и оно, лишь бы языком почесать.

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

- Слушай, Пятрович.

За калиткой сосед.

- Я вот что хочу тебе рассказать. Знаешь, есть такая пила, зверь, маленькая, а пилит ..., нужно только кнопочку нажать и все. А еще есть штука, сама дрова колет, ага, только что складывать их не умеет, а так прямо как по щучьему велению. А еще есть ...

- Идить ты на ..., Миколай.

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

Вот зачастую в темах вы напоминаете мне персонажа за калиткой. А вот когда написанное вами в темах к месту, это и читать интересно.

Займитесь наконец практикой, поостынете с теориями, просто некогда будет. ;)

Malleys 14.01.2020 11:19

Цитата:

Сообщение от laimas
Вот то то и оно, лишь бы языком почесать.

🌚 Просто до тебя ещё не дошло, что программирование это не только ковыряние в «файле с 2379 строками»...

Цитата:

Сообщение от laimas
Вот зачастую в темах вы напоминаете мне персонажа за калиткой.

🌚 Это ваша проблема, что вы не можете или не хотите ничего нового узнавать и применять... А то, что кто кто-то может обойтись без jQuery и PHP — для вас нонсенс и всего лишь «теоретик»...

А на деле про «теоретиков» — https://stackoverflow.com/jobs?td=ph...&s=75000&c=USD
и «практиков» — https://stackoverflow.com/jobs?tl=ph...&s=75000&c=USD

laimas 14.01.2020 11:57

Цитата:

Сообщение от Malleys
Просто до тебя ещё не дошло

Я вижу до вас дошло, что прёт аж из края, юморист. :D Некогда мне лясы точить, да и не хочу. Я все сказал, а далее ...

Malleys 14.01.2020 12:12

Цитата:

Сообщение от laimas
Я вижу до вас дошло, что прёт аж из края

А если не дошло, то разве ковыряние в «файле с 2379 строками» не приобщает к касте программистов?

Цитата:

Сообщение от laimas
Хватить мне лапшу на уши вешать о технологиях, платформах и прочем.

Я ваши уши ещё не трогал! А мы-то тут про то, как «прибить гвоздями» клиент к серверу! Точней мне всё равно (но лучше, чтобы около меня такого не было), а вы настаиваете: «Непременно!», «Непременно!»

laimas 14.01.2020 15:46

Цитата:

Сообщение от Malleys
А мы-то тут про то, как «прибить гвоздями» клиент к серверу!

Бредятина какая-то.

Malleys 15.01.2020 04:40

Цитата:

Сообщение от laimas
Бредятина какая-то.

Ну и раздельный клиент и сервер тоже вами были сочтены за бред. Не всё то худо, что худым кажется!


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