Saya mencari beberapa masukan tentang cara mengimplementasikan penanganan acara kustom di jquery dengan cara terbaik. Saya tahu cara menghubungkan acara dari elemen dom seperti 'klik' dll, tapi saya sedang membangun perpustakaan javascript kecil / plugin untuk menangani beberapa fungsi pratinjau.
Saya menjalankan skrip untuk memperbarui beberapa teks dalam elemen dom dari serangkaian aturan dan input data / pengguna yang saya dapatkan, tetapi sekarang saya membutuhkan teks yang sama yang ditampilkan dalam elemen lain yang tidak mungkin diketahui oleh skrip ini. Yang saya butuhkan adalah pola yang baik untuk mengamati naskah ini menghasilkan teks yang dibutuhkan.
Jadi bagaimana saya melakukan ini? Apakah saya mengabaikan beberapa fungsi bawaan dalam jquery untuk meningkatkan / menangani acara pengguna atau apakah saya memerlukan beberapa plugin jquery untuk melakukannya? Menurut Anda apa cara / plugin terbaik untuk menangani ini?
Jawaban:
Lihatlah ini:
(dicetak ulang dari halaman blog yang sudah kadaluwarsa http://jamiethompson.co.uk/web/2008/06/17/publish-subscribe-with-jquery/ berdasarkan versi yang diarsipkan di http://web.archive.org/web /20130120010146/http://jamiethompson.co.uk/web/2008/06/17/publish-subscribe-with-jquery/ )
Publikasikan / Berlangganan Dengan jQuery
17 Juni 2008
Dengan maksud untuk menulis UI jQuery yang terintegrasi dengan fungsionalitas offline Google Gears, saya telah mempermainkan beberapa kode untuk memilih status koneksi jaringan menggunakan jQuery.
Objek Deteksi Jaringan
Premis dasarnya sangat sederhana. Kami membuat instance objek deteksi jaringan yang akan melakukan polling URL secara berkala. Jika permintaan HTTP ini gagal, kita dapat mengasumsikan bahwa konektivitas jaringan telah hilang, atau server tidak dapat dijangkau pada saat ini.
Anda dapat melihat demo di sini. Atur browser Anda untuk bekerja offline dan lihat apa yang terjadi .... tidak, itu tidak terlalu menarik.
Pemicu dan Bind
Apa yang mengasyikkan (atau paling tidak apa yang mengasyikkan bagi saya) adalah metode yang digunakan untuk menyampaikan status melalui aplikasi. Saya telah menemukan metode yang sebagian besar tidak dibahas dalam mengimplementasikan sistem pub / sub menggunakan metode pemicu dan pengikatan jQuery.
Kode demo lebih tumpul daripada yang seharusnya. Objek deteksi jaringan menerbitkan acara 'status' ke dokumen yang secara aktif mendengarkannya dan kemudian menerbitkan acara 'beri tahu' ke semua pelanggan (lebih lanjut tentang hal itu nanti). Alasan di balik ini adalah bahwa dalam aplikasi dunia nyata mungkin akan ada beberapa logika yang mengontrol kapan dan bagaimana acara 'notifikasi' dipublikasikan.
Karena peristiwa pendekatan sentris DOM jQuery dipublikasikan ke (dipicu pada) elemen DOM. Ini bisa menjadi jendela atau objek dokumen untuk acara umum atau Anda bisa membuat objek jQuery menggunakan pemilih. Pendekatan yang saya ambil dengan demo adalah membuat pendekatan yang hampir sama dengan penempatan nama untuk mendefinisikan pelanggan.
Elemen DOM yang akan menjadi pelanggan digolongkan hanya dengan "pelanggan" dan "networkDetection". Kami kemudian dapat mempublikasikan acara hanya untuk elemen-elemen ini (yang hanya ada satu di demo) dengan memicu pemberitahuan acara
$(“.subscriber.networkDetection”)
The
#notifier
div yang merupakan bagian dari.subscriber.networkDetection
kelompok pelanggan kemudian memiliki fungsi anonim terikat untuk itu, secara efektif bertindak sebagai pendengar.Jadi, begitulah. Semuanya sangat verbose dan contoh saya sama sekali tidak menarik. Ini juga tidak menampilkan hal menarik yang dapat Anda lakukan dengan metode ini, tetapi jika ada yang tertarik untuk menggali sumbernya, silakan. Semua kode sebaris di bagian atas halaman demo
sumber
Tautan yang disediakan dalam jawaban yang diterima menunjukkan cara yang bagus untuk mengimplementasikan sistem pub / sub menggunakan jQuery, tetapi saya menemukan kode agak sulit dibaca, jadi di sini adalah versi kode saya yang disederhanakan:
http://jsfiddle.net/tFw89/5/
sumber
n
sejumlah argumen.var eventData = [].slice.call(arguments).splice(1)
Saya kira begitu .. mungkin untuk 'mengikat' acara khusus, seperti (dari: http://docs.jquery.com/Events/bind#typedatafn ):
sumber
myCustomEvent
dinaikkan, ikatan di atas menambahkan pendengar.Saya memiliki pertanyaan serupa, tetapi sebenarnya mencari jawaban yang berbeda; Saya ingin membuat acara khusus. Misalnya bukannya selalu mengatakan ini:
Saya ingin menyingkatnya menjadi ini:
memicu dan mengikat tidak menceritakan keseluruhan cerita - ini adalah plugin JQuery. http://docs.jquery.com/Plugins/Authoring
Fungsi "enterKey" dilampirkan sebagai properti ke jQuery.fn - ini adalah kode yang diperlukan:
http://jsfiddle.net/b9chris/CkvuJ/4/
Kelebihan dari hal di atas adalah Anda dapat menangani input keyboard dengan anggun di tautan pendengar seperti:
Suntingan: Diperbarui untuk meneruskan
this
konteks yang tepat ke penangan dengan benar, dan mengembalikan nilai pengembalian dari penangan ke jQuery (misalnya jika Anda ingin membatalkan acara dan menggelegak). Diperbarui untuk meneruskan objek acara jQuery yang tepat ke penangan, termasuk kode kunci dan kemampuan untuk membatalkan acara.Old jsfiddle: http://jsfiddle.net/b9chris/VwEb9/24/
sumber
scroll
, yang tidak menyebar. Saya berpikir bahwa alih-alih menyuruh pendengar melakukan hardcode ke tubuh, saya membutuhkan elemen yang memilikion
—hampir terikat pada mereka untuk menembakkan peristiwa itu sendiri.Itu adalah posting lama, tetapi saya akan mencoba memperbaruinya dengan informasi baru.
Untuk menggunakan acara khusus, Anda harus mengikatnya ke beberapa elemen DOM dan untuk memicunya. Jadi, Anda perlu menggunakan
dan
Kode ini terlihat seperti ini:
Penjelasan yang bagus dapat ditemukan di sini dan di sini . Kenapa ini bisa berguna? Saya menemukan cara menggunakannya dalam penjelasan yang sangat baik ini dari insinyur twitter .
PS Dalam javascript biasa Anda dapat melakukan ini dengan CustomEvent baru , tetapi waspadai masalah IE dan Safari.
sumber
Inilah cara saya membuat acara khusus:
Memang, Anda bisa melakukannya
Tetapi cara saya menulis memungkinkan Anda untuk mendeteksi apakah pengguna telah mencegah default atau tidak dengan melakukan
Ini memungkinkan Anda untuk mendengarkan permintaan pengguna akhir Anda untuk berhenti memproses acara tertentu, seperti jika Anda mengklik elemen tombol dalam formulir tetapi tidak ingin formulir untuk memposting jika ada kesalahan.
Saya kemudian biasanya mendengarkan acara seperti itu
Sekali lagi, Anda bisa melakukannya
Tapi saya selalu menemukan ini agak tidak aman, terutama jika Anda bekerja dalam tim.
Tidak ada yang salah dengan hal berikut:
Namun, asumsikan bahwa saya perlu melepaskan ikatan acara ini untuk alasan apa pun (bayangkan tombol yang dinonaktifkan). Maka saya harus melakukannya
Ini akan menghapus semua
eventname
acara dari$(element)
. Anda tidak dapat mengetahui apakah seseorang di masa depan juga akan mengikat acara ke elemen itu, dan Anda juga akan secara tidak sengaja melepaskan ikatan acara tersebut.Cara aman untuk menghindari ini adalah dengan namespace acara Anda dengan melakukan
Terakhir, Anda mungkin memperhatikan bahwa baris pertama adalah
Saya pribadi selalu membatalkan ikatan acara sebelum mengikatnya hanya untuk memastikan bahwa pengendali acara yang sama tidak pernah dipanggil berulang kali (bayangkan ini adalah tombol kirim pada formulir pembayaran dan acara telah terikat 5 kali)
sumber