2012-07-18 5 views
8

Sto riscontrando un problema con gli elementi creati dinamicamente sullo stato di hover. Quando passo il mouse sull'elemento html appena creato, non funziona.Come rendere jQuery 1.7 .on() hover?

Ecco il mio codice 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!'); 
}); 

Ho anche provato questo codice:

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

}); 

come mostrato qui http://api.jquery.com/on/, ma ancora senza fortuna. Ecco anche la demo: http://jsfiddle.net/BQ2FA/

+0

forse questo aiuterà su on/off: http://stackoverflow.com/questions/11283341/jquery-disable-click-until-animation-is-fully-completo –

risposta

18

Questa non è la sintassi corretta.

Utilizzare questo per ascoltare i vostri eventi per creata dinamicamente '.hover' elementi:

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

Il primo argomento per '.on()' può ancora essere un oggetto (come sta facendo l'OP) se si vuole evitare di doverlo chiamare esplicitamente più volte. (Non inferiore al mio - questa risposta è ancora corretta). –

+0

@JamesAllardice Esistono molte soluzioni possibili e sono d'accordo che è possibile rendere più breve, ma la chiamata dell'OP non potrebbe essere applicabile agli elementi ".hover" creati dinamicamente, ecco cosa ho risolto. –

+1

Lo so, stavo solo sottolineando il fatto che l'OP non dovrebbe cambiare più di tanto - possono semplicemente cambiare il selettore iniziale e aggiungere il selettore '.hover' come secondo argomento dopo la mappa dei nomi degli eventi e degli eventi gestori. Non hanno bisogno di cambiarlo per essere 2 chiamate separate a '.on()'. (Il commento è stato a favore dell'OP, non una critica alla tua risposta). –

3

Si utilizza .on per vincolante diretta, è necessario utilizzare per la delega:

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

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