2010-11-18 7 views
2

Ich benutze jQuery Ereignisse wie mouseover und mouseout.jQuery-Ereignis nach Dom-Baum-Änderung

Wenn ein Benutzer den mouseover auf das Zielelement auslöst, erhält dieses Element eine neue Klasse (mit removeClass und addClass).

Dann, wenn die Maus herauskommt, wird Mouseout ausgelöst, aber der Selektor des Elements mit dem Mouseout-Ereignis stimmt nicht mehr überein, weil ich die Klasse geändert habe.

Beispiel:

$('span.project_unsel').mouseover(function() { 
    $(this).removeClass('project_unsel'); 
    $(this).addClass('project_sel'); 
}); 

Nach der obigen Veranstaltung Brennen hat Klasse geändert, und Folgendes abgefeuert nicht erhalten.

$('span.project_sel').mouseout(function() { 
    $(this).removeClass('project_sel'); 
    $(this).addClass('project_unsel'); 
}); 

Wie kann ich sagen, jQuery zu "update" oder "bind" wieder zu verstehen, dies?

Vielen Dank!

+2

Warum wählen Sie nicht nach ID (oder zumindest nicht den Klassennamen, den Sie ändern) und fügen Sie dann die Klasse entfernen? – m4tt1mus

+0

weil es einige davon gibt, und ich denke "id" sollte einzigartig sein. – oimoim

+0

aber Sie haben Recht, ich sollte eine "leere" Klasse verwenden, um sie auszuwählen – oimoim

Antwort

3

Ich würde vorschlagen, so etwas wie dies stattdessen tun, um macht die Dinge weniger verwirrend:

$('span.project').hover(function() { 
    $(this).addClass('selected'); 
}, function() { 
    $(this).removeClass('selected'); 
}); 

Das heißt, binden .hover auf Elemente mit der Klasse .project und einfach hinzufügen und die .selected Klasse entfernen, wenn die MouseEnter- (erstes Argument) und mouseleave (zweites Argument) Ereignisse werden ausgelöst.

Werfen Sie einen Blick auf .hover.

0

Es gibt einige Möglichkeiten, dies zu beheben, aber wenn Sie Ihre Codeänderungen minimieren möchten, können Sie einfach eine andere Klasse zu Ihren Zielelementen hinzufügen, die sich nicht ändert, und dann an diese binden.

Wenn Sie nicht eine zusätzliche Klasse aus irgendeinem Grund hinzuzufügen, versuchen Sie dies:

$('span.project_sel,span.project_unsel').mouseout(function() { 
    $(this).removeClass('project_sel').addClass('project_unsel'); 
}).mouseover(function() { 
    $(this).removeClass('project_unsel').addClass('project_sel'); 
}); 

Sie könnten auch einen Blick auf toggleClass() nehmen, wenn Sie das Gefühl, Hinzufügen/Entfernen unelegant ist.

Bearbeiten: Karim Schwebeflug-Lösung ist besser als das Mouseout/mouseover.

Verwandte Themen