Итак, у меня есть раскрывающееся меню, которое отображается при нажатии в соответствии с бизнес-требованиями. Меню снова становится скрытым после того, как вы отведете от него указатель мыши.
Но теперь меня просят оставить его на месте до тех пор, пока пользователь не щелкнет в любом месте документа. Как этого добиться?
Это упрощенная версия того, что у меня есть сейчас:
$(document).ready(function() {
$("ul.opMenu li").click(function(){
$('#MainOptSubMenu',this).css('visibility', 'visible');
});
$("ul.opMenu li").mouseleave(function(){
$('#MainOptSubMenu',this).css('visibility', 'hidden');
});
});
<ul class="opMenu">
<li id="footwo" class="">
<span id="optImg" style="display: inline-block;"> <img src="http://localhost.vmsinfo.com:8002/insight/images/options-hover2.gif"/> </span>
<ul id="MainOptSubMenu" style="visibility: hidden; top: 25px; border-top: 0px solid rgb(217, 228, 250); background-color: rgb(217, 228, 250); padding-bottom: 15px;">
<li>some</li>
<li>nav</li>
<li>links</li>
</ul>
</li>
</ul>
Я пробовал что-то вроде этого, $('document[id!=MainOptSubMenu]').click(function()
думая, что это сработает для всего, что не было в меню, но это не сработало.
Ответы:
Взгляните на подход, использованный в этом вопросе:
Как определить щелчок за пределами элемента?
источник
Ответ правильный, но он добавит слушателя, который будет запускаться каждый раз, когда на вашей странице происходит щелчок. Чтобы этого избежать, вы можете добавить слушателя только один раз:
Изменить: если вы хотите избежать
stopPropagation()
начальной кнопки, вы можете использовать этоисточник
e.stopPropagation()
в Chrome, чтобы остановить срабатывание первого события вone()
обработчикеПараметры
stopPropagation
плохие, потому что они могут мешать другим обработчикам событий, включая другие меню, которые могли прикрепить обработчики закрытия к элементу HTML.Вот простое решение, основанное на ответе пользователя 2989143 :
источник
Если в вашем случае использование плагина подходит, то я предлагаю плагин Clickoutside Бена Алмана, расположенный здесь :
его использование так же просто:
надеюсь это поможет.
источник
2 варианта, которые вы можете изучить:
источник
Я нашел вариант решения Grsmto в и решение Денниса сосредоточил свой вопрос.
источник
Я использую это решение с несколькими элементами с одинаковым поведением на одной странице:
stopPropagation () - плохая идея, это нарушает стандартное поведение многих вещей, включая кнопки и ссылки.
источник
$target.closest('#menu-container, #menu-activator').length === 0
Недавно я столкнулся с той же проблемой. Я написал следующий код:
У меня это сработало отлично.
источник
как насчет этого?
источник
Я считаю более полезным использовать mousedown-event вместо click-event. Событие клика не работает, если пользователь нажимает на другие элементы на странице с событиями клика. В сочетании с методом one () jQuery это выглядит так:
источник
даже я столкнулся с такой же ситуацией, и один из моих наставников поделился этой идеей со мной.
step: 1 при нажатии на кнопку, на которой мы должны показать раскрывающееся меню. затем добавьте указанное ниже имя класса "more_wrap_background" на текущую активную страницу, как показано ниже.
step-2 затем добавьте щелчки для тега div, например
где hideDropDown - это функция, вызываемая для скрытия раскрывающегося меню
Шаг 3 и важный шаг при скрытии раскрывающегося меню - это удаление того класса, который вы добавили ранее, например
Я удаляю, используя его идентификатор в приведенном выше коде
источник
И лучше установить слушателя только тогда, когда ваше меню отображается, и всегда удалять слушателя после того, как меню становится скрытым.
источник
Думаю, вам нужно что-то вроде этого: http://jsfiddle.net/BeenYoung/BXaqW/3/
Надеюсь, это пригодится вам!
источник
Используйте селектор ': visible'. Где .menuitem - это элементы, которые нужно скрыть ...
Или, если у вас уже есть элементы .menuitem в var ...
источник
Это не должно быть сложно.
источник