Eu tenho um <ul>
que é preenchido com javascript após o carregamento da página inicial. Atualmente, estou usando .bind
com mouseover
e mouseout
.
O projeto acabou de ser atualizado para o jQuery 1.7, por isso tenho a opção de usá-lo .on
, mas não consigo fazê-lo funcionar hover
. É possível usar .on
com hover
?
EDIT : Os elementos aos quais estou vinculando são carregados com javascript após o carregamento do documento. É por isso que estou usando on
e não apenas hover
.
mouseenter
emouseleave
, como sugerido por calebthebrewer.Respostas:
( Veja a última edição nesta resposta se precisar usar
.on()
com elementos preenchidos com JavaScript )Use isso para elementos que não são preenchidos usando JavaScript:
.hover()
tem seu próprio manipulador: http://api.jquery.com/hover/Se você deseja fazer várias coisas, encadeie-as no
.on()
manipulador da seguinte maneira:De acordo com as respostas fornecidas a seguir você pode usar
hover
com.on()
, mas:Além disso, não há vantagens de desempenho em usá-lo e é mais volumoso do que apenas usar
mouseenter
oumouseleave
. A resposta que forneci requer menos código e é a maneira correta de obter algo assim.EDITAR
Já faz um tempo desde que essa pergunta foi respondida e parece ter ganhado alguma força. O código acima ainda permanece, mas eu queria adicionar algo à minha resposta original.
Embora prefira usar
mouseenter
emouseleave
(me ajude a entender o que está acontecendo no código).on()
, é o mesmo que escrever o seguinte comhover()
Desde a pergunta original fez perguntar como eles poderiam usar corretamente
on()
comhover()
, eu pensei que iria corrigir o uso deon()
e não achar que é necessário adicionar ohover()
código no momento.EDIÇÃO 11 DE DEZEMBRO DE 2012
Algumas novas respostas fornecidas abaixo detalham como
.on()
deve funcionar se odiv
em questão for preenchido usando JavaScript. Por exemplo, digamos que você preencha um eventodiv
usando jQuery.load()
, assim:O código acima para
.on()
não seria válido. Em vez disso, você deve modificar seu código levemente, assim:Este código funcionará para um elemento preenchido com JavaScript após a
.load()
ocorrência de um evento. Apenas mude seu argumento para o seletor apropriado.fonte
.on()
solução funciona removendo o evento pseudo-hover e usando os reais. I como o primeiro que você ilustrada com mouseenter / mouseleave +1 para issoNenhuma dessas soluções funcionou para mim ao passar o mouse sobre os objetos criados após o carregamento do documento, conforme a pergunta solicitada. Sei que essa pergunta é antiga, mas tenho uma solução para quem ainda procura:
Isso vinculará as funções ao seletor, para que objetos com esse seletor feito após o documento estar pronto ainda possam chamá-lo.
fonte
mouseover
e osmouseout
eventos aqui farão com que o código seja acionado continuamente à medida que o usuário move o mouse dentro do elemento. Pensomouseenter
emouseleave
sou mais apropriado, pois só dispara uma vez ao entrar.Não sei como é o restante do seu Javascript, por isso não poderei dizer se há alguma interferência. Mas
.hover()
funciona muito bem como um evento com.on()
.Se você deseja utilizar seus eventos, use o objeto retornado do evento:
http://jsfiddle.net/hmUPP/2/
fonte
$('#id').hover(function(){ //on }, function(){ //off});
.on()
-hover
lo quando puder facilmente se livrar.on()
e substituí-lo pela.hover()
função e obter os mesmos resultados. O jQuery não é sobre escrever menos código?mouseenter
emouseleave
funções com.on()
hover
O suporte ao eventoOn()
foi descontinuado no jQuery 1.8 e removido no jQuery 1.9.A função hover jQuery oferece funcionalidade de passagem e saída do mouse.
$ (seletor) .hover (inFunction, outFunction);
Fonte: http://www.w3schools.com/jquery/event_hover.asp
fonte
Apenas naveguei na web e achei que poderia contribuir. Notei que, com o código acima publicado por @calethebrewer, pode resultar em várias chamadas pelo seletor e comportamento inesperado, por exemplo: -
Este violino http://jsfiddle.net/TWskH/12/ ilustra meu ponto de vista. Ao animar elementos como os plugins, descobri que esses múltiplos gatilhos resultam em comportamento não intencional, o que pode resultar na animação ou no código ser chamado mais do que o necessário.
Minha sugestão é simplesmente substituir por mouseenter / mouseleave: -
Embora isso evitasse que várias instâncias da minha animação fossem chamadas, eu finalmente passei o mouse sobre o mouse / mouse, pois precisava determinar quando os filhos do pai estavam passando o mouse.
fonte
Você pode usar
.on()
comhover
fazendo o que a seção Additional Notes diz:Isso seria o seguinte:
EDIT (observação para usuários do jQuery 1.8+):
fonte
mouseenter
emouseleave
... Eu sei, isso não responde à pergunta original do OP, mas ainda assim, usandohover
dessa maneira, não é sábio..hover()
.mouseenter
e, emmouseleave
vez de apenas fazê-lo funcionarhover
. Se não há motivo real para usarhover
por motivos de desempenho, por que usá-lo quando é fortemente desencorajado para o novo código?hover
o suporte a eventosOn()
foi descontinuado no jQuery 1.8 e removido no jQuery 1.9.fonte
Você pode fornecer um ou vários tipos de eventos separados por um espaço.
Então
hover
é igualmouseenter mouseleave
.Esta é a minha sugestão:
fonte
Se você precisa ter como condição em outro evento, resolvi-o desta maneira:
Em outro evento, você pode usá-lo facilmente:
(Vejo alguns usando
is(':hover')
para resolver isso. Mas este ainda não é um seletor jQuery válido e não funciona em todos os navegadores compatíveis)fonte
O plugin jQuery hoverIntent http://cherne.net/brian/resources/jquery.hoverIntent.html vai muito além das abordagens ingênuas listadas aqui. Embora eles certamente funcionem, eles podem não necessariamente se comportar como os usuários esperam.
O motivo mais forte para usar o hoverIntent é o tempo limite recurso de . Ele permite que você faça coisas como impedir que um menu seja fechado porque um usuário arrasta o mouse levemente demais para a direita ou esquerda antes de clicar no item desejado. Ele também fornece recursos para não ativar eventos de foco em uma barragem e aguarda foco focalizado.
Exemplo de uso:
Maiores explicações sobre isso podem ser encontradas em https://stackoverflow.com/a/1089381/37055
fonte