2012-07-18 1 views
8

Ich habe ein Problem mit dynamisch erstellten Elementen im Hover-Status. Wenn ich den Mauszeiger über ein neu erstelltes HTML-Element halte, funktioniert es nicht.Wie macht man jQuery 1.7 .on() Hover?

Hier ist mein HTML-Code:

<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!'); 
}); 

ich diesen Code auch versucht:

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

}); 

wie hier http://api.jquery.com/on/ gezeigt, aber noch kein Glück. Hier ist auch Demo: http://jsfiddle.net/BQ2FA/

+0

vielleicht hilft dies über on/off: http://stackoverflow.com/questions/11283341/jquery-disable-click-untilimation-is-fully-complete –

Antwort

18

Dies ist nicht die richtige Syntax.

verwenden, um Ihre Veranstaltungen zu hören für Elemente ‚.hover‘ dynamisch erstellt:

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

Das erste Argument für '.on()' kann immer noch ein Objekt sein (wie es das OP gerade tut), wenn Sie vermeiden wollen, es explizit mehrfach aufrufen zu müssen. (Downvote nicht meins - diese Antwort ist immer noch korrekt). –

+0

@JamesAllardice Es gibt viele mögliche Lösungen, und ich stimme zu, dass es möglich ist, kürzer zu machen, aber der OP-Aufruf konnte nicht auf dynamisch erzeugte ".hover" -Elemente angewendet werden, das habe ich behoben. –

+1

Ich weiß, ich habe nur darauf hingewiesen, dass das OP nicht so viel ändern müsste - sie können einfach den anfänglichen Selektor ändern und den '.hover' Selektor als zweites Argument nach der Karte von Ereignisnamen und Ereignis hinzufügen Handler. Sie müssen es nicht in 2 separate Aufrufe von '.on()' ändern. (Der Kommentar war für das OP, keine Kritik an Ihrer Antwort). –

3

Du .on für die direkte Bindung verwenden, müssen Sie es für die Delegierung verwenden:

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

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