Saya diberitahu untuk menggunakan document.ready ketika saya pertama kali mulai menggunakan Javascript / jQuery tetapi saya tidak pernah benar-benar tahu mengapa.
Mungkinkah seseorang memberikan beberapa pedoman dasar tentang kapan masuk akal untuk membungkus kode javascript / jquery di dalam jQuery document.ready
?
Beberapa topik yang saya minati:
.on()
Metode jQuery : Saya menggunakan.on()
metode untuk AJAX cukup banyak (biasanya pada elemen DOM yang dibuat secara dinamis). Haruskah.on()
penangan klik selalu menjadi dalamdocument.ready
?- Kinerja: Apakah lebih baik menyimpan berbagai objek javascript / jQuery di dalam atau di luar document.ready (juga, apakah perbedaan kinerjanya signifikan?)?
- Cakupan objek: Halaman yang dimuat AJAX tidak dapat mengakses objek yang ada di dalam dokumen halaman sebelumnya. Sudah, benar? Mereka hanya dapat mengakses objek yang berada di luar document.ready (yaitu, objek yang benar-benar "global")?
Pembaruan: Untuk mengikuti praktik terbaik, semua javascript saya (pustaka jQuery dan kode aplikasi saya) ada di bagian bawah halaman HTML saya dan saya menggunakan defer
atribut pada skrip yang mengandung jQuery pada halaman yang dimuat AJAX sehingga saya dapat mengakses perpustakaan jQuery di halaman ini.
javascript
jquery
dom
event-handling
document-ready
tim peterson
sumber
sumber
Jawaban:
Dengan kata sederhana,
Misalkan Anda telah menempatkan kode jQuery Anda di
head
bagian dan mencoba mengaksesdom
elemen (jangkar, img dll), Anda tidak akan dapat mengaksesnya karenahtml
ditafsirkan dari atas ke bawah dan elemen html Anda tidak ada saat kode jQuery Anda lari.Untuk mengatasi masalah ini, kami menempatkan setiap kode jQuery / javascript (yang menggunakan DOM) di dalam
$(document).ready
fungsi yang dipanggil ketika semuadom
elemen dapat diakses.Dan inilah alasannya, ketika Anda menempatkan kode jQuery Anda di bagian bawah (setelah semua elemen dom, tepat sebelumnya
</body>
), tidak perlu$(document).ready
Tidak perlu menempatkan
on
metode di dalam$(document).ready
hanya ketika Anda menggunakanon
metodedocument
karena alasan yang sama yang saya jelaskan di atas.EDIT
Dari komentar,
$(document).ready
tidak menunggu gambar atau skrip. Itulah perbedaan besar antara$(document).ready
dan$(document).load
Hanya kode yang mengakses DOM yang harus siap ditangani. Jika itu sebuah plugin, itu seharusnya tidak dalam acara siap.
sumber
$(document).ready
. Lihat inihead
dan Anda skrip setelah elemen dimanipulasi,document.ready
tidak diperlukan. Gambar adalah kasus khusus meskipun ...jQuery
kode di penangan siap. Hanya kode yang mengakses DOM. Jika itu sebuah plugin, seharusnya tidak ada dalamready
acaraJawaban:
Tidak, tidak selalu. Jika Anda memuat JS Anda di kepala dokumen, Anda perlu. Jika Anda membuat elemen setelah halaman dimuat melalui AJAX, Anda harus melakukannya. Anda tidak perlu jika skrip berada di bawah elemen html, Anda juga akan menambahkan penangan.
Tergantung. Ini akan membutuhkan jumlah waktu yang sama untuk memasang penangan, itu hanya tergantung apakah Anda ingin itu terjadi segera saat halaman sedang dimuat atau jika Anda ingin menunggu sampai seluruh dokumen dimuat. Jadi itu akan tergantung pada hal-hal lain yang Anda lakukan di halaman.
Ini pada dasarnya adalah fungsinya sendiri sehingga hanya dapat mengakses vars yang dideklarasikan pada lingkup global (di luar / di atas semua fungsi) atau dengan
window.myvarname = '';
sumber
Sebelum Anda dapat menggunakan jQuery dengan aman, Anda perlu memastikan bahwa halaman dalam keadaan siap untuk dimanipulasi. Dengan jQuery, kita mencapai ini dengan meletakkan kode kita dalam sebuah fungsi, dan kemudian meneruskan fungsi itu ke
$(document).ready()
. Fungsi yang kita lewati hanya bisa menjadi fungsi anonim .Ini akan menjalankan fungsi yang kita teruskan ke .ready () setelah dokumen siap. Apa yang terjadi di sini? Kami menggunakan $ (document) untuk membuat objek jQuery dari dokumen halaman kami, dan kemudian memanggil fungsi .ready () pada objek itu, meneruskannya ke fungsi yang ingin kami jalankan.
Karena ini adalah sesuatu yang sering Anda lakukan, ada metode singkat untuk ini jika Anda lebih suka - fungsi $ () melakukan tugas ganda sebagai alias untuk $ (document) .ready () jika Anda meneruskannya ke fungsi:
Ini adalah bacaan yang bagus: Jquery Fundamentals
sumber
(function($){ })(jQuery);
mana yang membungkus kode Anda sehingga $ adalah jQuery di dalam penutupan itu.ready () - Tentukan fungsi yang akan dijalankan saat DOM dimuat sepenuhnya.
Berikut adalah Daftar semua Metode jQuery
Baca tentang Memperkenalkan $ (document) .ready ()
sumber
Agar realistis,
document.ready
tidak diperlukan hal lain selain memanipulasi DOM secara akurat dan tidak selalu diperlukan atau opsi terbaik. Yang saya maksud adalah ketika Anda mengembangkan plugin jQuery yang besar misalnya Anda hampir tidak menggunakannya di seluruh kode karena Anda mencoba membuatnya KERING, jadi Anda abstrak sebanyak mungkin dalam metode yang memanipulasi DOM tetapi dimaksudkan untuk dipanggil kemudian. Ketika semua kode Anda terintegrasi erat, satu-satunya metode yang tereksposdocument.ready
biasanya adalahinit
tempat semua keajaiban DOM terjadi. Semoga ini menjawab pertanyaan Anda.sumber
Anda harus mengikat semua tindakan di document.ready, karena Anda harus menunggu hingga dokumen dimuat sepenuhnya.
Tapi, Anda harus membuat fungsi untuk semua tindakan dan memanggilnya dari dalam dokumen. Sudah. Saat Anda membuat fungsi (objek global Anda), panggil mereka kapan pun Anda mau. Jadi, setelah data baru Anda dimuat dan elemen baru dibuat, panggil fungsi itu lagi.
Fungsi ini adalah fungsi tempat Anda mengikat peristiwa dan item tindakan.
sumber
Saya menambahkan tautan ke div dan ingin melakukan beberapa tugas dengan klik. Saya menambahkan kode di bawah elemen yang ditambahkan di DOM tetapi tidak berhasil. Ini kodenya:
Tidak bekerja. Kemudian saya menempatkan kode jQuery di dalam $ (document) .ready dan itu bekerja dengan sempurna. Ini dia.
sumber
Peristiwa siap terjadi ketika DOM (model objek dokumen) telah dimuat.
Karena peristiwa ini terjadi setelah dokumen siap, ini adalah tempat yang baik untuk memiliki semua peristiwa dan fungsi jQuery lainnya. Seperti contoh di atas.
Metode ready () menentukan apa yang terjadi ketika kejadian siap terjadi.
Tip: Metode ready () tidak boleh digunakan bersama dengan.
sumber