2011-01-09 10 views
0

Brennen habe ich einen Code wie dieseJavascript/jQuery: MouseEnter- Ereignis nicht richtig

$('#singleColumn' + time).show(SHOW_COMPONENT_SPEED) 
    .live('mouseenter', function() { $('#propertiesButtonSingle' + time).fadeIn(FADEIN_SPEED); }) 
    .live('mouseleave', function() { $('#propertiesButtonSingle' + time).fadeOut(FADEOUT_SPEED); }); 

, die ich zu zeigen, bin mit/versteckt eine Taste, wenn MouseEnter-/mouseleave Ereignisse auf einem Kasten abgefeuert werden.

Das Problem ist, dass meine Seite dynamisch ist, d. H. Ich füge mit der JQuery .html() - Funktion neuen HTML-Code zur Seite hinzu. Was passiert, ist, dass die Mausereignisse nur für die letzte Box ausgelöst werden, die ich hinzugefügt habe (ich füge sie per Drag & Drop hinzu): Praktisch funktioniert es für die erste Box, wenn ich eine zweite hinzufüge, werden die Events korrekt ausgelöst, aber wann Ich bewege die Maus über die erste Box, nichts passiert. Wenn ich eine dritte Box hinzufüge, hört die zweite auf zu arbeiten, usw. ...

Der Code, den ich gepostet habe, ist für eine Art von Box, aber für die anderen Typen ist es praktisch dasselbe abgesehen von den Selektornamen.

+0

Was 'Time' ist, und ist dieser Lauf für jeden mögliche Wahl? –

+0

time ist ein Zeitstempel, um für jedes Objekt unterschiedliche IDs zu erstellen. Dieser Code wird ausgeführt, wenn eine Box erstellt wird, also ist der Selektor der Name der Box, die gerade erstellt wurde, was meinst du mit jedem möglichen Selektor? –

+0

Für alle: Es ist genau so, wie die neuen mouseenter-Ereignisse alle vorherigen überschreiben, auch wenn der Selektor anders ist. –

Antwort

0

einen Blick auf .delegate() - http://api.jquery.com/delegate

Sie Ereignisse zu einem Objekt höher der DOM-Struktur binden können und hören ...

+0

Aber in diesem Fall ist das Objekt nicht höher als der DOM-Baum, weil ich den Handler erst an das Objekt angehängt habe, nachdem das Objekt erstellt wurde. –

Verwandte Themen