mouseover() mouseout() jQuery add/removeClass problem
Ich bin versucht, zu erstellen eine einfache mouseover-Effekt mit einer Kombination aus mouseover, mouseout, addClass und removeClass. Im Grunde, wenn der Benutzer die Maus über ein element, ich möchte einen anderen Rahmen (1px dashed gray). Der ursprüngliche Zustand ist "1px solid white". Ich habe eine Klasse namens "markieren", die hat einfach "border: 1px dashed gray" in ihm. Ich möchte hinzufügen, dass, Klasse onmouseover und entfernen Sie Sie auf onmouseout aber ich bin nicht in der Lage zu bekommen, der Effekt, den ich möchte, es sei denn ich verwende !wichtig in der "highlight" - Klasse.
- Könnten Sie zeigen einige code?
- BTW, Brian: da bist du mit jQuery, möchten Sie vielleicht zu prüfen, die hover-event-Helfer-Methode: docs.jquery.com/Events/hover
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt, als ob Sie haben die javascript-Sie arbeiten in Ordnung ist, aber es ist nur ein problem mit der die Spezifität der CSS-Regeln, das ist der Grund, warum
!important
macht es Arbeit.Den Sie gerade haben, um Ihren hervorgehobenen css-Regeln, die spezifischer als die nicht-markierten Regeln.
Bearbeiten mit der weiteren Erklärung:
Sagen wir mal die relevanten Teile deiner HTML so Aussehen:
haben, und Sie haben dieses CSS:
Derzeit, alle die Elemente der Liste in der
ul
im#someItem div
haben einen weißen Rand, und nichts hat die Klassehighlight
also nix Grau.Durch welche Mittel auch immer Sie möchten (in Ihrem Fall ein hover-event in jQuery), fügen Sie eine Klasse zu einem der Elemente:
Wird der HTML-Code nun wie folgt Aussehen:
So weit, Javascript-und HTML funktionieren, aber Sie nicht sehen, einen grauen Rand! Das problem ist dein CSS. Wenn der browser versucht, zu entscheiden, wie, style-element, es sieht bei all den verschiedenen Selektoren, die target-element und die Stile, in denen definiert wird, Selektoren. Wenn es zwei verschiedene Selektoren beide definieren den gleichen Stil (in unserem Fall die Rahmenfarbe ist umstritten), dann hat es zu entscheiden, welchen Stil Sie anwenden und welche zu ignorieren sind. Er tut dies mittels dessen, was ist bekannt als "Spezifität" - das ist, wie spezifisch der Selektor ist. Wie in der HTML-Hund Artikel, es tut dies durch die Zuweisung eines Wertes zu jedem Teil Ihres selector, und derjenige mit der höchsten Punktzahl gewinnt. Die Punkte sind:
Gibt es einige weitere Regeln, z.B.: mit dem Schlüsselwort
!important
und auch inline-styles, aber das ist weitgehend irrelevant, für diese, ähh... "Lektion". Die einzige andere Sache, die Sie wissen sollten ist, dass, wenn zwei Selektoren die gleiche Spezifität, bei der man dann später festgelegt in der Datei wins.Um auf dein problem zurückzukommen, angesichts der CSS hatten wir vor, wir können sehen, warum es immer noch nicht habe eine graue Einfassung:
Wie bereits erwähnt, die Lösung ist die Schaffung eines spezifischeren Selektor:
Und beantworten Ihre Frage in den Kommentaren, die Sie nicht ändern müssen Ihre javascript oder HTML-Code für diese zu arbeiten. Wenn Sie brechen, dass der Selektor, das was er sagt ist:
...und nun, in Anbetracht der einfachen
.addClass()
nennen, die Sie früher gemacht, dieli
erfüllt diese Bedingungen, so dass der Rand soll Grau.Von Jquery 1.3.3 werden Sie in der Lage, das zu tun dieses ein wenig einfacher. Es wird eine verbesserte version von .toggleClass() zur Verfügung, die sehr mächtig sein.
Wenn Sie nicht brauchen, zu brechen, diese in eine Funktion dann aus 1.3.3 Sie werden in der Lage sein, einfach das zu tun:
Wenn Sie zu zählen !wichtig dann Ihre highlight-Klasse, können, müssen bestimmte (siehe CSS-Spezifität).
Ich vermute, Sie verwenden einen inline-Stil auf das element, für das ursprüngliche Stil:
Diese überschreiben die Formatvorlagen mit einem Klasse... So anstelle der Verwendung von inline-styles, benutzen Sie einfach eine andere erste Klasse gelten die ursprünglichen Stile:
Dies ist ein Beispiel für ein hover die ich verwendet habe:
die Sie nicht wirklich haben, etwas kaputt zu machen diese einfach in einzelne Funktionen.
Ich vermute, dein Problem könnte mit einem Konflikt in der css - versuchen Sie einfach, die Anwendung Ihre highlight-Klasse hardcodeing , oder auf klicken Sie auf und sehen, ob es auch wirklich funktioniert.
Hoffe, das hilft
Jim
Haben Sie als eine Reine css-Ansatz?
Beispiel:
Den
hover
pseudo-Klasse wird, geben Sie das Verhalten, das Sie wollen: wenn der Benutzer moused über das element, wird der untere Stil, sonst wird es mit dem ersten Stil.Hinweis: als jemand bemerkte, dies funktioniert nicht für nicht
a
Elemente im IE. Es funktioniert aber bei mir in Chrome, Firefox, Safari und Opera.Funktioniert es auch für jedes element im IE8 und IE7-standards-Modus. Ich habe keinen IE6 zu testen, wenn.
CSS:
JS:
normalerweise mache ich es auf diesem Weg. (ermöglicht weitere Optionen)
Oder Sie können nur tun Sie es mit einfachen CSS: