Jak mogę uruchomić zdarzenie, jeśli klasa CSS zostanie dodana lub zmieniona za pomocą jQuery? Czy zmiana klasy CSS wywołuje change()
zdarzenie jQuery ?
jquery
css
jquery-events
użytkownik237060
źródło
źródło
Odpowiedzi:
Za każdym razem, gdy zmieniasz klasę w skrypcie, możesz użyć a,
trigger
aby wywołać własne wydarzenie.ale w przeciwnym razie nie, nie ma sposobu na uruchomienie zdarzenia, gdy klasa się zmieni.
change()
strzela tylko wtedy, gdy fokus pozostawia wejście, którego wejście zostało zmienione.Więcej informacji na temat wyzwalaczy jQuery
źródło
changeColor
zdarzenie, a wszystkie obiekty subskrybujące to zdarzenie mogą odpowiednio zareagować.IMHO lepszym rozwiązaniem jest połączenie dwóch odpowiedzi @ RamboNo5 i @Jason
Mam na myśli przesłonięcie funkcji addClass i dodanie niestandardowego zdarzenia o nazwie
cssClassChanged
źródło
$()
momentu rozpoczęcia prawdziwej akcji.cssClassChanged
zdarzenie z elementem, musisz mieć świadomość, że zostanie ono zwolnione, nawet jeśli jego dziecko zmieni klasę. Dlatego jeśli na przykład nie chcesz odpalić tego wydarzenia dla nich, po prostu dodaj coś$("#YourExampleElementID *").on('cssClassChanged', function(e) { e.stopPropagation(); });
po powiązaniu. W każdym razie naprawdę fajne rozwiązanie, dzięki!Jeśli chcesz wykryć zmianę klasy, najlepszym sposobem jest użycie obserwatora mutacji, który daje ci pełną kontrolę nad każdą zmianą atrybutu. Musisz jednak samodzielnie zdefiniować słuchacza i dołączyć go do słuchanego elementu. Dobrą rzeczą jest to, że nie trzeba ręcznie uruchamiać niczego po dołączeniu detektora.
W tym przykładzie detektor zdarzeń jest dołączany do każdego elementu, ale w większości przypadków nie chcesz tego (oszczędzaj pamięć). Dołącz ten detektor „attrchange” do elementu, który chcesz obserwować.
źródło
DOMMutationObserver
.Sugeruję przesłonięcie funkcji addClass. Możesz to zrobić w ten sposób:
źródło
Tylko dowód koncepcji:
Spójrz na sedno, aby zobaczyć niektóre adnotacje i być na bieżąco:
https://gist.github.com/yckart/c893d7db0f49b1ea4dfb
Użycie jest dość proste, wystarczy dodać nowego listera w węźle, który chcesz obserwować, i jak zwykle manipulować klasami:
źródło
this[0]
jest niezdefiniowane ... po prostu zamień koniec linii navar oldClass
ivar newClass
z następującym przypisaniem:= (this[0] ? this[0].className : "");
przy użyciu najnowszej mutacji jquery
// każdy kod, który aktualizuje div mający wpis klasy wymagany, który jest w $ target, np. $ target.addClass ('search-class');
źródło
change()
nie jest uruchamiany po dodaniu lub usunięciu klasy CSS lub zmianie definicji. Uruchamia się w okolicznościach, takich jak wybranie lub odznaczenie wartości pola wyboru.Nie jestem pewien, czy masz na myśli zmianę definicji klasy CSS (co można zrobić programowo, ale jest żmudna i ogólnie nie zalecana), czy też klasa jest dodawana lub usuwana z elementu. W obu przypadkach nie ma możliwości wiarygodnego uchwycenia tego zdarzenia.
Możesz oczywiście stworzyć własne wydarzenie w tym celu, ale można to opisać jedynie jako doradztwo . Nie będzie przechwytywać kodu, który nie należy do Ciebie.
Alternatywnie możesz zastąpić / zastąpić metody
addClass()
(itp.) W jQuery, ale to nie zostanie przechwycone, gdy zostanie to zrobione za pomocą waniliowego Javascript (chociaż myślę, że możesz również zastąpić te metody).źródło
Jest jeszcze jeden sposób bez wyzwalania niestandardowego zdarzenia
Wtyczka jQuery do monitorowania zmian HTML CSS elementu HTML przez Rick Strahl
Cytowanie z góry
źródło
Dobre pytanie. Korzystam z menu rozwijanego Bootstrap i potrzebowałem wykonać zdarzenie, gdy menu rozwijane Bootstrap było ukryte. Po otwarciu menu zawierającego div z nazwą klasy „grupa przycisków” dodaje klasę „otwarta”; a sam przycisk ma atrybut „aria-expanded” ustawiony na true. Kiedy menu rozwijane jest zamknięte, klasa „otwarta” jest usuwana z zawierającego div, a aria-expanded jest zmieniana z true na false.
Doprowadziło mnie to do pytania, jak wykryć zmianę klasy.
Dzięki Bootstrap można wykryć „Zdarzenia rozwijane”. Znajdź „Zdarzenia rozwijane” pod tym linkiem. http://www.w3schools.com/bootstrap/bootstrap_ref_js_dropdown.asp
Oto szybki i brudny przykład użycia tego zdarzenia w menu rozwijanym Bootstrap.
Teraz zdaję sobie sprawę, że jest to bardziej szczegółowe niż zadawane ogólne pytanie. Ale wyobrażam sobie, że inni programiści próbujący wykryć otwarte lub zamknięte zdarzenie za pomocą menu rozwijanego Bootstrap uznają to za pomocne. Podobnie jak ja, początkowo mogą pójść ścieżką po prostu próbując wykryć zmianę klasy elementu (co najwyraźniej nie jest takie proste). Dzięki.
źródło
Jeśli chcesz wyzwolić określone zdarzenie, możesz przesłonić metodę addClass (), aby uruchomić niestandardowe zdarzenie o nazwie „classadded”.
Oto jak:
źródło
Możesz powiązać zdarzenie DOMSubtreeModified. Tutaj dodaję przykład:
HTML
JavaScript
http://jsfiddle.net/hnCxK/13/
źródło
jeśli wiesz, które wydarzenie zmieniło klasę, możesz użyć niewielkiego opóźnienia na tym samym wydarzeniu i sprawdzić, czy klasa. przykład
http://jsfiddle.net/GuDCp/3/
źródło
źródło