Bagaimana saya bisa menjalankan suatu acara jika kelas CSS ditambahkan atau diubah menggunakan jQuery? Apakah perubahan kelas CSS memicu change()
acara jQuery ?
jquery
css
jquery-events
pengguna237060
sumber
sumber
Jawaban:
Setiap kali Anda mengubah kelas dalam skrip Anda, Anda bisa menggunakan a
trigger
untuk meningkatkan acara Anda sendiri.tetapi sebaliknya, tidak, tidak ada cara untuk memecat suatu peristiwa ketika kelas berubah.
change()
hanya menyala setelah fokus meninggalkan input yang inputnya telah diubah.Info lebih lanjut tentang Pemicu jQuery
sumber
changeColor
acara tersebut, dan semua objek yang berlangganan acara itu dapat bereaksi sesuai.IMHO solusi yang lebih baik adalah menggabungkan dua jawaban oleh @ RamboNo5 dan @Jason
Maksud saya mengesampingkan fungsi addClass dan menambahkan acara kustom yang disebut
cssClassChanged
sumber
$()
, ketika tindakan nyata dimulai.cssClassChanged
acara ini ke suatu elemen, Anda harus menyadari bahwa itu akan dipecat bahkan ketika anaknya mengubah kelas mereka. Karenanya, jika misalnya Anda tidak ingin memecat acara ini untuk mereka, tambahkan saja sesuatu seperti$("#YourExampleElementID *").on('cssClassChanged', function(e) { e.stopPropagation(); });
setelah bind Anda. Bagaimanapun, solusi yang sangat bagus, terima kasih!Jika Anda ingin mendeteksi perubahan kelas, cara terbaik adalah menggunakan Pengamat Mutasi, yang memberi Anda kontrol penuh atas perubahan atribut apa pun. Namun Anda harus mendefinisikan pendengar sendiri, dan menambahkannya ke elemen yang Anda dengarkan. Untung Anda tidak perlu memicu apa pun secara manual setelah pendengar ditambahkan.
Dalam contoh ini pendengar acara ditambahkan ke setiap elemen, tetapi Anda tidak ingin itu dalam kebanyakan kasus (menghemat memori). Tambahkan pendengar "attrchange" ini ke elemen yang ingin Anda amati.
sumber
DOMMutationObserver
.Saya sarankan Anda mengganti fungsi addClass. Anda bisa melakukannya dengan cara ini:
sumber
Hanya bukti konsep:
Lihatlah intinya untuk melihat beberapa anotasi dan tetap terbarui:
https://gist.github.com/yckart/c893d7db0f49b1ea4dfb
Penggunaannya cukup sederhana, cukup tambahkan listender baru pada node yang ingin Anda amati dan memanipulasi kelas seperti biasanya:
sumber
this[0]
tidak terdefinisi ... cukup ganti ujung baris denganvar oldClass
danvar newClass
dengan tugas berikut:= (this[0] ? this[0].className : "");
menggunakan mutasi jquery terbaru
// kode apa pun yang memperbarui div yang memiliki entri wajib kelas yang dalam $ target seperti $ target.addClass ('kelas pencarian');
sumber
change()
tidak menyala ketika kelas CSS ditambahkan atau dihapus atau definisi berubah. Ini menyala dalam keadaan seperti ketika nilai kotak pilih dipilih atau tidak dipilih.Saya tidak yakin apakah maksud Anda jika definisi kelas CSS diubah (yang dapat dilakukan secara terprogram tetapi membosankan dan umumnya tidak disarankan) atau jika kelas ditambahkan atau dihapus ke suatu elemen. Tidak ada cara untuk menangkap kejadian ini dengan andal dalam kedua kasus tersebut.
Anda tentu saja dapat membuat acara Anda sendiri untuk ini, tetapi ini hanya dapat digambarkan sebagai penasehat . Itu tidak akan menangkap kode yang bukan milikmu melakukannya.
Atau Anda bisa mengganti / mengganti metode
addClass()
(dll) di jQuery tetapi ini tidak akan menangkap ketika dilakukan melalui vanilla Javascript (walaupun saya kira Anda juga bisa mengganti metode itu).sumber
Ada satu cara lagi tanpa memicu acara khusus
Plug-in jQuery untuk memantau Perubahan Elemen CSS Html oleh Rick Strahl
Mengutip dari atas
sumber
Pertanyaan bagus. Saya menggunakan Menu Dropdown Bootstrap, dan diperlukan untuk menjalankan suatu peristiwa ketika Bootstrap Dropdown disembunyikan. Ketika dropdown dibuka, div yang berisi dengan nama kelas "tombol-grup" menambahkan kelas "terbuka"; dan tombol itu sendiri memiliki atribut "aria-extended" yang disetel ke true. Ketika dropdown ditutup, kelas "terbuka" itu dihapus dari div yang mengandung, dan aria-diperluas beralih dari true ke false.
Itu mengarahkan saya ke pertanyaan ini, tentang bagaimana mendeteksi perubahan kelas.
Dengan Bootstrap, ada "Acara Dropdown" yang dapat dideteksi. Cari "Acara Dropdown" di tautan ini. http://www.w3schools.com/bootstrap/bootstrap_ref_js_dropdown.asp
Berikut adalah contoh cepat-dan-kotor dari menggunakan acara ini pada Bootstrap Dropdown.
Sekarang saya menyadari ini lebih spesifik daripada pertanyaan umum yang diajukan. Tapi saya membayangkan pengembang lain yang mencoba mendeteksi acara terbuka atau tertutup dengan Bootstrap Dropdown akan menemukan ini membantu. Seperti saya, mereka mungkin pada awalnya hanya mencoba mendeteksi perubahan kelas elemen (yang tampaknya tidak begitu sederhana). Terima kasih.
sumber
Jika Anda perlu memicu suatu peristiwa tertentu, Anda dapat mengganti metode addClass () untuk memecat acara khusus yang disebut 'classadded'.
Di sini caranya:
sumber
Anda dapat mengikat acara DOMSubtreeModified. Saya menambahkan contoh di sini:
HTML
JavaScript
http://jsfiddle.net/hnCxK/13/
sumber
jika Anda tahu acara apa yang mengubah kelas di tempat pertama Anda dapat menggunakan sedikit keterlambatan pada acara yang sama dan memeriksa kelas. contoh
http://jsfiddle.net/GuDCp/3/
sumber
sumber