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