Ich habe eine Geige erstellt, um zu versuchen, ein Problem zu debuggen, das ich habe, wo, sobald ich HTML-Elemente mit jQuery neu anordnen, schweben Ereignisse auf diesen Elementen nicht mehr arbeiten.Ändern Sie die Element-ID, aber jQuery löst weiterhin das Ereignis aus, das die alte ID aufruft. Warum funktioniert das?
Allerdings stieß ich auf diese interessante Situation hier: http://jsfiddle.net/4yv1trj4/
Ich habe eine Haupt div
die Farbe wechselt, wenn ich den Mauszeiger über sie.
$("#block").hover(function() {
$(this).css("backgroundColor", "red");
}, function() {
$(this).css("backgroundColor", "#888");
});
Wenn Sie auf die Schaltfläche klicken, die wichtigsten div
‚s ID Änderungen block2
:
$("#block").attr("id","block2");
aber $("#block").hover()
feuert immer noch, wenn ich über #block2
schweben. Außerdem funktionieren alle Hover-Aufrufe unter #block2
nicht. Gibt es ein grundlegendes Prinzip, wie jQuery funktioniert, das dies erklären würde?
Danke, das hilft mir, es ein wenig zu verstehen. http://jsfiddle.net/4yv1trj4/5/ Ich aktualisierte die jsfiddle, um zu lösen und zu re-binden, aber Code sieht hässlich wie Hölle aus und ich kann nicht helfen zu glauben, dass es viel bessere Möglichkeiten geben könnte, dies zu tun. Denkst du, dass Technophobias Antwort eine bessere Option wäre, meinen Code zu verkleinern? – mcheah
Ich mag Technophobie Workaround, obwohl ich es nicht für Ihren Anwendungsfall aufgrund der Probleme von Canon (http://stackoverflow.com/questions/31032004/change-element-id-but-jquery-still-fires) empfehlen würde -event-calling-alt-id-warum-tut-das-wor/31032094 # comment50091306_31032395). Ich denke, deine Lösung war nicht so schlecht. – lucasnadalutti
Offensichtlich gibt es einen Handel, mit dem Sie zu kämpfen haben - ich persönlich habe '.on()' Container Bindungen in unzähligen Projekten mit minimalen Auswirkungen auf die Leistung verwendet. – technophobia