Tengo un <ul>
que se rellena con javascript después de la carga inicial de la página. Actualmente estoy usando .bind
con mouseover
y mouseout
.
El proyecto acaba de actualizarse a jQuery 1.7, así que tengo la opción de usar .on
, pero parece que no puedo hacerlo funcionar hover
. ¿Es posible usar .on
con hover
?
EDITAR : los elementos a los que me estoy vinculando se cargan con javascript después de que se carga el documento. Es por eso que estoy usando on
y no solo hover
.
mouseenter
ymouseleave
, como lo sugiere calebthebrewer.Respuestas:
( Mire la última edición en esta respuesta si necesita usar
.on()
elementos rellenados con JavaScript )Use esto para elementos que no se completan con JavaScript:
.hover()
tiene su propio controlador: http://api.jquery.com/hover/Si desea hacer varias cosas, encadénelas en el
.on()
controlador de la siguiente manera:De acuerdo con las respuestas proporcionadas a continuación se puede utilizar
hover
con.on()
, pero:Además, no hay ventajas de rendimiento al usarlo y es más voluminoso que solo usar
mouseenter
omouseleave
. La respuesta que proporcioné requiere menos código y es la forma correcta de lograr algo como esto.EDITAR
Ha pasado un tiempo desde que se respondió esta pregunta y parece haber ganado algo de tracción. El código anterior sigue en pie, pero quería agregar algo a mi respuesta original.
Si bien prefiero usar
mouseenter
ymouseleave
(me ayuda a comprender lo que está sucediendo en el código) con.on()
él, es igual que escribir lo siguientehover()
Dado que la pregunta original hizo preguntan cómo podrían utilizar adecuadamente
on()
conhover()
, pensé que iba a corregir el uso deon()
y no nos pareció necesario añadir elhover()
código en el momento.EDITAR 11 DE DICIEMBRE DE 2012
Algunas nuevas respuestas proporcionadas a continuación detallan cómo
.on()
debería funcionar si ladiv
pregunta en cuestión se completa con JavaScript. Por ejemplo, supongamos que llena un eventodiv
usando jQuery.load()
, de esta manera:El código anterior para
.on()
no se mantendría. En cambio, debe modificar su código ligeramente, así:Este código funcionará para un elemento poblado con JavaScript después de
.load()
que haya ocurrido un evento. Simplemente cambie su argumento al selector apropiado.fuente
.on()
solución funciona eliminando el evento pseudo hover y utilizando los reales. Me gusta el primero que ilustraste con mouseenter / mouseleave +1 para esoNinguna de estas soluciones funcionó para mí al pasar el mouse sobre / fuera de los objetos creados después de que el documento se haya cargado como lo solicita la pregunta. Sé que esta pregunta es antigua pero tengo una solución para aquellos que todavía buscan:
Esto vinculará las funciones al selector para que los objetos con este selector realizado después de que el documento esté listo aún puedan llamarlo.
fuente
mouseover
ymouseout
eventos aquí hará que el código se active continuamente mientras el usuario mueve el mouse dentro del elemento. Creomouseenter
y soymouseleave
más apropiado ya que solo se disparará una vez al entrar.No estoy seguro de cómo se ve el resto de su Javascript, por lo que no podré saber si hay alguna interferencia. Pero
.hover()
funciona bien como un evento con.on()
.Si desea poder utilizar sus eventos, use el objeto devuelto del evento:
http://jsfiddle.net/hmUPP/2/
fuente
$('#id').hover(function(){ //on }, function(){ //off});
.on()
conhover
cuando se puede tan fácilmente deshacerse de.on()
y reemplazarla con la.hover()
función y obtener los mismos resultados. ¿No es jQuery sobre escribir menos código?mouseenter
ymouseleave
funciones con.on()
hover
El soporte de eventos enOn()
se desactivó en jQuery 1.8 y se eliminó en jQuery 1.9.La función de desplazamiento de jQuery proporciona funcionalidad de mouseover y mouseout.
$ (selector) .hover (inFunction, outFunction);
Fuente: http://www.w3schools.com/jquery/event_hover.asp
fuente
Acabo de navegar desde la web y sentí que podía contribuir. Noté que con el código anterior publicado por @calethebrewer puede resultar en múltiples llamadas sobre el selector y un comportamiento inesperado, por ejemplo: -
Este violín http://jsfiddle.net/TWskH/12/ ilustra mi punto. Al animar elementos como los complementos, descubrí que estos disparadores múltiples provocan un comportamiento no deseado que puede provocar que la animación o el código se invoquen más de lo necesario.
Mi sugerencia es simplemente reemplazar con mouseenter / mouseleave: -
Aunque esto evitó que se llamaran varias instancias de mi animación, eventualmente fui con mouseover / mouseleave, ya que necesitaba determinar cuándo se cernían los hijos de los padres.
fuente
Se puede utilizar
.on()
conhover
haciendo lo que la sección adicional Notas dice:Eso sería hacer lo siguiente:
EDITAR (nota para usuarios de jQuery 1.8+):
fuente
mouseenter
ymouseleave
... Lo sé, esto no responde la pregunta original de OP, pero aún así, usarhover
de esta manera, no es sabio..hover()
.mouseenter
ymouseleave
en lugar de hacer que funcione conhover
. Si no hay una razón real para usarhover
por razones de rendimiento, ¿por qué usarla cuando se desaconseja encarecidamente el nuevo código?hover
El soporte de eventos enOn()
se desactivó en jQuery 1.8 y se eliminó en jQuery 1.9.fuente
Puede proporcionar uno o varios tipos de eventos separados por un espacio.
Entonces
hover
es igualmouseenter mouseleave
.Esta es mi sugestión:
fuente
Si necesita que tenga como condición en otro evento, lo resolví de esta manera:
Luego, en otro evento, puede usarlo fácilmente:
(Veo algunos usando
is(':hover')
para resolver esto. Pero esto no es (todavía) un selector jQuery válido y no funciona en todos los navegadores compatibles)fuente
El complemento jQuery hoverIntent http://cherne.net/brian/resources/jquery.hoverIntent.html va mucho más allá de los enfoques ingenuos enumerados aquí. Si bien ciertamente funcionan, es posible que no se comporten necesariamente como esperan los usuarios.
La razón más poderosa para usar hoverIntent es la función de tiempo de espera . Le permite hacer cosas como evitar que se cierre un menú porque un usuario arrastra el mouse un poco demasiado a la derecha o izquierda antes de hacer clic en el elemento que desea. También proporciona capacidades para no activar eventos de desplazamiento en un aluvión y espera un desplazamiento centrado.
Ejemplo de uso:
Se puede encontrar una explicación más detallada de esto en https://stackoverflow.com/a/1089381/37055
fuente