2012-07-18 11 views
8

Tengo un problema con los elementos creados dinámicamente en el estado de desplazamiento. Cuando cierro sobre el elemento html recién creado, no funciona.Cómo hacer jQuery 1.7 .on() hover?

Aquí está mi código HTML:

<button id="create">create new button</button> 
<button class="hover">hover me</button> 
<div></div> 

jQuery:

var createBtn = $("#create"); 

createBtn.click(function() { 
    $('div').append('<button class="hover">new hover button</button'); 
    return false;   
}); 


$('.hover').hover(function() { 
    alert('you hovered the button!'); 
}, function() { 
    alert('you removed the hover from button!'); 
}); 

Incluso probé este código:

$('.hover').on({ 
    mouseenter : function() { 
     alert('you hovered the button!'); 
    }, 
    mouseleave : function() { 
     alert('you removed the hover from button!'); 
    } 

}); 

como se muestra aquí http://api.jquery.com/on/, pero aún ninguna suerte. Aquí también está la demostración: http://jsfiddle.net/BQ2FA/

+0

quizás esto ayude a activar/desactivar: http://stackoverflow.com/questions/11283341/jquery-disable-click-until-animation-is-fully-complete –

Respuesta

18

Esta no es la sintaxis correcta.

Usar esta opción para escuchar sus eventos de forma dinámica creada '.hover' elementos:

$(document).on('mouseenter', '.hover', function(){ 
     alert('you hovered the button!'); 
}).on('mouseleave', '.hover', function() { 
     alert('you removed the hover from button!'); 
}); 
+2

El primer argumento para '.on()' aún puede ser un objeto (como lo hace actualmente el OP) si quiere evitar tener que llamarlo explícitamente varias veces. (Voto no mío, esta respuesta sigue siendo correcta). –

+0

@JamesAllardice Hay muchas soluciones posibles, y estoy de acuerdo en que es posible acortar, pero la llamada de OP no podría ser aplicable a elementos '.hover' creados dinámicamente, eso es lo que arreglé. –

+1

Lo sé, solo estaba señalando el hecho de que el OP no tendría que cambiar tanto; pueden simplemente cambiar el selector inicial y agregar el selector '.hover' como segundo argumento después del mapa de nombres de eventos y eventos manejadores. No tienen que cambiarlo para que sean 2 llamadas separadas a '.on()'. (El comentario fue para el beneficio del PO, no una crítica de su respuesta). –

3

está usando el .on para la unión directa, es necesario utilizarlo para la delegación:

$('div').on({ 
    mouseenter: function() { 
     alert('you hovered the button!'); 
    }, 
    mouseleave: function() { 
     alert('you removed the hover from button!'); 
    } 
}, ".hover"); 

http://jsfiddle.net/BQ2FA/2/