Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.08.2019, 04:39
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Присвоение класса после нажатия
Всем привет.
В общем у меня на сайте стоит боковая панель с корзиной у которой присвоен класс .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, 18.08.2019 в 03:20.
Ответить с цитированием
  #2 (permalink)  
Старый 17.08.2019, 16:24
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

кто нибудь помогите, уже 2 день голову ломаю
Ответить с цитированием
  #3 (permalink)  
Старый 17.08.2019, 19:59
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от WebMachine
класс .is-hidden присваивается к тегу с классом .calculation-panel и тегу .mcart которая ниже
Не наблюдается. В чем проблема и зачем таймер?

$(document).mouseup(function (e) не понятно почему вне $(document).ready(function($)?
Ответить с цитированием
  #4 (permalink)  
Старый 17.08.2019, 21:10
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

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

$(document).mouseup(function (e) не понятно почему вне $(document).ready(function($)?
мне просто нужно чтобы span содержимое было внутри тега mcart, тогда я смогу в название кнопки выводить ещё и количество.

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

Последний раз редактировалось WebMachine, 17.08.2019 в 21:14.
Ответить с цитированием
  #5 (permalink)  
Старый 17.08.2019, 22:01
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

Последний раз редактировалось laimas, 17.08.2019 в 22:03.
Ответить с цитированием
  #6 (permalink)  
Старый 18.08.2019, 00:10
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Цитата:
А переместив кнопку в другое место, каким образом на ней что-то новое может появится?
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 в 02:39.
Ответить с цитированием
  #7 (permalink)  
Старый 18.08.2019, 01:04
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

$(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'); })
});

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

Последний раз редактировалось WebMachine, 18.08.2019 в 03:21.
Ответить с цитированием
  #8 (permalink)  
Старый 18.08.2019, 05:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Ошибка карты кода: 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");
});

Последний раз редактировалось laimas, 18.08.2019 в 06:24.
Ответить с цитированием
  #9 (permalink)  
Старый 18.08.2019, 13:03
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

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

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

Последний раз редактировалось WebMachine, 18.08.2019 в 13:18.
Ответить с цитированием
  #10 (permalink)  
Старый 18.08.2019, 13:07
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

как теперь быть? я так понял теперь уже 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" ?

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

Последний раз редактировалось WebMachine, 18.08.2019 в 13:33.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Применение класса после клика Djambulat Angular.js 2 23.05.2017 14:02
Всплывающее окно после нажатия на кнопку в форме kolhoz jQuery 29 26.03.2015 16:55
Присвоение класса родителю при наведении на дочерний alexmoreman jQuery 7 19.01.2015 17:26
Не работает код Javascript на присвоение класса ссылке osya90 Общие вопросы Javascript 6 11.01.2015 18:59
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17