На данный вопрос уже ответили:
По неопытности не получается реализовать задачу. Что нужно дописать к данному коду, чтобы возврат к исходному состоянию (Меню) можно было реализовать, как через клик по .openclosebtn, так и через клик по body?
$('.openclosebtn').click(function() {
if (!$(this).data('status')) {
$(this).html('Close');
$(this).data('status', true);
} else {
$(this).html('Меню');
$(this).data('status', false);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main">
<span class="openclosebtn">Меню</span>
</div>
// Бинд кнопки
$('.togglebtn').click(() => {
if (checkIsOpened()) {
closeMenu()
} else {
openMenu()
}
})
// Бинд документа
$(document).click(event => {
// Здесь мы проверяем, что мы кликнули не по кнопке открытия меню
// или её внутренностям
if (!$(event.target).is('.togglebtn, .togglebtn *')) {
closeMenu()
}
})
// Возврващает состояние меню
function checkIsOpened() {
return !!$('.togglebtn').data('opened')
}
// Закрывает меню
function closeMenu() {
$('.togglebtn').data('opened', false)
$('#menustate').text('Закрыто')
}
// Открывает меню
function openMenu() {
$('.togglebtn').data('opened', true)
$('#menustate').text('Открыто')
}
.togglebtn {
display: inline-block;
padding: 3px 7px;
background: #555;
cursor: pointer;
color: #fff;
user-select: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<span class="togglebtn">
Меню: <span id="menustate">Закрыто</span>
</span>
Есть нечто подобное на чистом JS
window.onclick = function(event){
if(!event.target.matches('.search-category__btn')){
categoryDropdown.style.display = "none";
}
}
.search-category__btn можно заменить на .openclosebtn ну и дальше...
var btn = $('.openclosebtn');
btn.click(function() {
if (!btn.data('status')) {
btn.html('Close');
btn.data('status', true);
} else {
btn.html('Меню');
btn.data('status', false);
}
});
$(document).mouseup(function(e) {
if (!btn.is(e.target) && // если кнопка - не цель клика
btn.has(e.target).length === 0 && // и кнопка не содержит в себе цель клика
btn.data('status')) { // и status = true
btn.html('Меню');
btn.data('status', false);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main">
<span class="openclosebtn">Меню</span>
</div>
$(() => {
let menuIsOpen = false;
const $body = $('body'),
$menu = $('.menu'),
$menuButton = $menu.find('.openclosebtn');
$menuButton.on('click', toggleMenu);
function toggleMenu() {
if(!menuIsOpen) menuShow();
else menuHide();
}
function menuShow() {
$menuButton.html('Close');
$menu.addClass('show');
$body.on('click', menuHideOnBodyClick); // Когда меню открыто, вешаем обработчик клика по body
menuIsOpen = true;
}
function menuHide() {
$menuButton.html('Меню');
$menu.removeClass('show');
$body.off('click', menuHideOnBodyClick); // Когда меню закрыто, отключаем обработчик клика по body
menuIsOpen = false;
}
function menuHideOnBodyClick( e ) {
const $elem = $(e.target);
/*
* Проверяем является ли то на что мы кликнули нашим меню
* или чем-то дочерним для него,
* если нет, то закрываем меню
*/
if(!$elem.closest('.menu').length) menuHide();
}
});
body { height: 500px; }
.menu { width: 140px; }
.menu_content { display: none; }
.menu.show .menu_content { display: block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main">
<div class="menu">
<span class="openclosebtn">Меню</span>
<div class="menu_content">
<ul>
<li>Menu Item</li>
<li>Menu Item</li>
<li>Menu Item</li>
<li>Menu Item</li>
<li>Menu Item</li>
</ul>
</div>
</div>
</div>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно создать массив, в котором элементы будут взяты из двух других массивовПервый элемент должен быть взят из первого массива, второй элемент...
Как сделать так, чтобы переходить между страницами без перезагрузки, но так чтобы url страницы менялся?
Использую вот этот пример: http://jsfiddlenet/8V9w6/ После загрузки файла, появляется предпросмотр, все работает нормально, но как только страничка перегружается,...