Portanto, tenho um menu suspenso que é exibido com um clique, de acordo com os requisitos de negócios. O menu fica oculto novamente depois que você move o mouse para longe dele.
Mas agora estou sendo solicitado a mantê-lo no lugar até que o usuário clique em qualquer lugar do documento. Como pode ser isto alcançado?
Esta é uma versão simplificada do que tenho agora:
$(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>
Eu tentei algo assim $('document[id!=MainOptSubMenu]').click(function()
pensando que acionaria qualquer coisa que não fosse o menu, mas não funcionou.
Respostas:
Dê uma olhada na abordagem que esta pergunta usou:
Como faço para detectar um clique fora de um elemento?
fonte
A resposta está certa, mas adicionará um ouvinte que será acionado toda vez que ocorrer um clique em sua página. Para evitar isso, você pode adicionar o ouvinte apenas uma vez:
Editar: se você quiser evitar o
stopPropagation()
no botão inicial, você pode usar issofonte
e.stopPropagation()
no Chrome para impedir o primeiro evento de disparar noone()
manipuladorAs
stopPropagation
opções são ruins porque podem interferir em outros manipuladores de eventos, incluindo outros menus que podem ter anexado manipuladores próximos ao elemento HTML.Aqui está uma solução simples com base na resposta do usuário 2989143 :
fonte
Se usar um plug-in no seu caso, sugiro o plug-in clickoutside de Ben Alman localizado aqui :
seu uso é tão simples quanto este:
espero que isto ajude.
fonte
2 opções que você pode investigar:
fonte
Eu encontrei uma variante de solução de Grsmto e solução Dennis' fixa o meu problema.
fonte
Eu uso esta solução com vários elementos com o mesmo comportamento na mesma página:
stopPropagation () é uma má ideia, pois quebra o comportamento padrão de muitas coisas, incluindo botões e links.
fonte
$target.closest('#menu-container, #menu-activator').length === 0
Recentemente, enfrentei o mesmo problema. Escrevi o seguinte código:
Funcionou perfeitamente para mim.
fonte
que tal isso?
fonte
Acho mais útil usar o evento mousedown em vez do evento de clique. O evento de clique não funciona se o usuário clica em outros elementos da página com eventos de clique. Em combinação com o método one () da jQuery, tem a seguinte aparência:
fonte
Até eu me deparei com a mesma situação e um dos meus mentores expôs essa ideia para mim.
passo: 1 quando clicado no botão em que devemos mostrar o menu suspenso. em seguida, adicione o nome da classe abaixo "more_wrap_background" à página ativa atual como mostrado abaixo
etapa 2 e adicionar cliques para a tag div, como
onde hideDropDown é a função a ser chamada para ocultar o menu suspenso
A etapa 3 e a etapa importante ao ocultar o menu suspenso é remover aquela classe que você adicionou anteriormente, como
Estou removendo usando seu id no código acima
fonte
E melhor definir o ouvinte apenas quando o menu estiver visível e sempre remover o ouvinte após o menu ficar oculto.
fonte
Acho que você precisa de algo assim: http://jsfiddle.net/BeenYoung/BXaqW/3/
Espero que seja útil para você!
fonte
Use o seletor ': visible'. Onde .menuitem é o (s) elemento (s) a ocultar ...
Ou se você já tem o (s) elemento (s) .menuitem em uma var ...
fonte
Não precisa ser complicado.
fonte