Показать сообщение отдельно
  #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.
Ответить с цитированием