Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Присвоение класса после нажатия (https://javascript.ru/forum/jquery/78266-prisvoenie-klassa-posle-nazhatiya.html)

WebMachine 17.08.2019 04:39

Присвоение класса после нажатия
 
Всем привет.
В общем у меня на сайте стоит боковая панель с корзиной у которой присвоен класс .is-hidden и при нажатии он убирается и панель выходит:

http://empire-taste.16mb.com

Как сделать чтобы класс .is-hidden распространялся только на тег с классом .mcart-panel ?

в данный момент класс .is-hidden присваивается к тегу с классом .mcart-panel и тегу .mcart которая ниже.

Функционал панели: empire-taste.16mb.com/templates/et/js/script.js
$(document).ready(function($) {
	var closeBtn = jQuery('#mcart-close'),
	panel = closeBtn.parent();
	setTimeout(function(){ panel.addClass('is-hidden');	}, 150);
	closeBtn.on('click', function(){ panel.toggleClass('is-hidden'); })
});
$(document).mouseup(function (e) {
    var container = $(".mcart-panel");
    if (container.has(e.target).length === 0){
        $(".mcart-panel").addClass("is-hidden");
    }
});

WebMachine 17.08.2019 16:24

кто нибудь помогите, уже 2 день голову ломаю

laimas 17.08.2019 19:59

Цитата:

Сообщение от WebMachine
класс .is-hidden присваивается к тегу с классом .calculation-panel и тегу .mcart которая ниже

Не наблюдается. В чем проблема и зачем таймер?

$(document).mouseup(function (e) не понятно почему вне $(document).ready(function($)?

WebMachine 17.08.2019 21:10

Цитата:

Сообщение от laimas (Сообщение 511818)
Не наблюдается. В чем проблема и зачем таймер?

$(document).mouseup(function (e) не понятно почему вне $(document).ready(function($)?

мне просто нужно чтобы span содержимое было внутри тега mcart, тогда я смогу в название кнопки выводить ещё и количество.

Но как только я ставлю span содержимое внутри тега mcart тогда класс is-hidden присваивается к .mcart-panel и ко второму "внутреннему" тегу .mcart

laimas 17.08.2019 22:01

Цитата:

Сообщение от WebMachine
мне просто нужно чтобы span содержимое было внутри тега mcart

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

Или поясняйте на примере html кода чего вы хотите, иначе ничего не понять.

WebMachine 18.08.2019 00:10

Цитата:

А переместив кнопку в другое место, каким образом на ней что-то новое может появится?
http://empire-taste.16mb.com/ вот сейчас посмотрите и увидите что я имел ввиду.

Изначально у тега mcart-panel есть is-hidden (по шаблону) а у mcart нет. но когда открываешь сайт то к mcart тоже присваивается класс is-hidden
<div class="mcart-panel is-hidden">
<div class="mcart">

<!-- кнопка боковой панели -->
<span class="mcart-close" id="mcart-close"><i class="fa fa-shopping-cart"></i> <b>Корзина товаров</b></span>
<!-- кнопка боковой панели -->

<div class="features-panel">
содержимое корзины товаров
</div>

</div>
</div>


.is-hidden присваивается к обоим классам.
Помогите сделать так чтобы боковая панель работала нормально как в начале так и после добавления товара в корзину.
И всё у меня больше нет проблем.

WebMachine 18.08.2019 01:04

$(document).ready(function($) {
	var closeBtn = jQuery('#mcart-close'),
	panel = closeBtn.parent();
	setTimeout(function(){ panel.addClass('is-hidden');	}, 150);
	closeBtn.on('click', function(){ panel.toggleClass('is-hidden'); })
});

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

laimas 18.08.2019 05:20

Это из отладчика:

Ошибка карты кода: request failed with status 404
URL ресурса: http://empire-taste.16mb.com/templat.../jquery.min.js
URL карты кода: jquery-1.10.2.min.map

Вопрос: зачем попытка его подключения, если ранее JQ уже подключен - <script type="text/javascript" src="/engine/classes/js/jquery.js"></script>?

Что означает это:

а) в файле sript.js

$(document).ready(function($) {
	var closeBtn = jQuery('#mcart-close'),
	panel = closeBtn.parent();
	setTimeout(function(){ panel.addClass('is-hidden');	}, 150);
	closeBtn.on('click', function(){ panel.toggleClass('is-hidden'); })
});

$(document).mouseup(function (e) {
    var container = $(".mcart-panel");
    if (container.has(e.target).length === 0){
        $(".mcart-panel").addClass("is-hidden");
    }
});


б) в файле mcart.js

$(document).ready(function($) {
	var closeBtn = jQuery('#mcart-close'),
	panel = closeBtn.parent();
	setTimeout(function(){ panel.addClass('is-hidden');	}, 150);
	closeBtn.on('click', function(){ panel.toggleClass('is-hidden'); })
});

$(document).mouseup(function (e) {
    var container = $(".mcart-panel");
    if (container.has(e.target).length === 0){
        $(".mcart-panel").addClass("is-hidden");
    }
})


Какой из них верен?

$(document).ready(function($) ... это обработчик готовности DOM, и достаточно один раз прописать это в коде, где устанавливать обработчики на элементы, то есть $(document).mouseup(function (e) должен быть в $(document).ready(function($), причем в файле sript.js он уже прописан. Но, ремируйте пока то что в sript.js, а далее что это за бардак разбирайтесь сами.

Считаем, что рабочий, это mcart.js. Этот файл подключается в конце страницы, то есть в данном случае $(document).ready(function($) можно и забыть, к этому моменту ваша кнопка уже есть. А теперь разбор полетов:

closeBtn = jQuery('#mcart-close') - это кнопка
panel = closeBtn.parent() - это родитель кнопки

Что является родителем кнопки? Смотрите на свой html. А ее родитель <div class="mcart">. Так чему вы добавляете класс, с которым боретесь, вот тут: panel.addClass('is-hidden') и panel.toggleClass('is-hidden')?

Вот это setTimeout(function(){ panel.addClass('is-hidden'); }, 150); пока вообще выбросим, если вы хотите при загрузке страницы показать что в корзине, то времени 150 мс явно недостаточно. А если нет, то выбросить к чертовой матери - присвоить класс "по умолчанию" можно и на стороне сервера при запросе страницы.

И так, в коде mcart.js должно быть только:

$('#mcart-close').click(function() {
    $(this).closest('.mcart-panel').toggleClass('is-hidden')
})


Проверяйте, щелкайте, etc. Это нужно? А далее уже добавляйте иное, $(document).mouseup...., только, если:

var container = $(".mcart-panel");

то зачем же получать ее еще раз:

if (container.has(e.target).length === 0){
    $(".mcart-panel").addClass("is-hidden");
}


используйте уже полученное:

$(document).mouseup(function (e) {
    var container = $(".mcart-panel");
    if (!container.has(e.target).length) container.addClass("is-hidden");
});

WebMachine 18.08.2019 13:03

laimas в файле sript.js я ещё вчера убрал все от панели.
и сделал для в отдельном файле mcart.js

сделал как вы сказали. боковая панель открывается и закрывается,
но теперь после добавления товара или увеличения кол-ва, кнопка не кликаетЦа

WebMachine 18.08.2019 13:07

как теперь быть? я так понял теперь уже http://empire-taste.16mb.com/templat...assets/libs.js виновата?
и почему у меня при увеличении кол-ва просит подтверждения действия "не указан ID товара" ? если я его указываю:

<div class="project-post col-md-4 col-sm-6 col-xs-12">
<div class="triggerAnimation animated ani-1-2 bounce" data-animate="bounce">
<img src="[xfvalue_image_url_img]" alt="">
<div class="hover-box">
<a class="zoom" href="[xfvalue_image_url_img]" title="{title}" title=""><i class="fa fa-search"></i></a>
</div>
<h3>{title}</h3>
<p>{short-story}</p>
<div class="price-box">
<ul class="cart-fast-add ignore-select">
<li class="col-25">[xfvalue_price] ₽</li>
<li class="col-25">[xfvalue_weight]гр</li>
<li class="cart-count">
<span class="cart-count-minus">-</span>
<input type="text" value="1" class="cart-count-val" />
<span class="cart-count-plus">+</span>
</li>
<li class="col-50"><button type="button" class="cart-fast-add-do btn btn-danger" data-id="{news-id}">Купить</button></li>
</ul>
</div>
</div>
</div>


Не могу понять в чем теперь проблема. Почему после добавления или увеличения товара панель перестает вылазить?
И почему появляется уведомление о "не указанном ID" ?

В консоли ни одной ошибки не выдает


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