Apa perbedaan antara metode JavaScript window.onload
dan jQuery $(document).ready()
?
javascript
jquery
dom-events
unobtrusive-javascript
Vaibhav Jain
sumber
sumber
$().ready()
membuatnya menyala setelahwindow.onload
beberapa waktu.Jawaban:
The
ready
peristiwa terjadi setelah dokumen HTML telah dimuat, sedangkanonload
peristiwa terjadi kemudian, ketika semua konten (misalnya gambar) juga telah dimuat.The
onload
event adalah peristiwa standar dalam DOM, sedangkanready
acara khusus untuk jQuery. Tujuanready
acara adalah bahwa itu harus terjadi sedini mungkin setelah dokumen dimuat, sehingga kode yang menambahkan fungsionalitas ke elemen-elemen di halaman tidak harus menunggu semua konten dimuat.sumber
ready
event ini khusus untuk jQuery. Itu menggunakanDOMContentLoaded
acara jika tersedia di browser, jika tidak meniru itu. Tidak ada padanan yang pasti dalam DOM karenaDOMContentLoaded
acara tersebut tidak didukung di semua browser.onload
.onload
adalah nama properti objek yang menyimpan fungsi yang akan dipanggil ketikaload
acara dipicu.window.onload
adalah acara JavaScript bawaan, tetapi karena implementasinya memiliki kebiasaan yang tidak kentara di seluruh peramban (Firefox, Internet Explorer 6, Internet Explorer 8, dan Opera ), jQuery menyediakandocument.ready
, yang mengabstraksikan mereka yang pergi, dan langsung menyala begitu DOM laman siap (tidak menunggu gambar, dll.)$(document).ready
(perhatikan bahwa ini bukandocument.ready
, yang tidak ditentukan) adalah fungsi jQuery, membungkus dan memberikan konsistensi pada peristiwa berikut:document.ondomcontentready
/document.ondomcontentloaded
- peristiwa agak baru yang muncul ketika DOM dokumen dimuat (yang mungkin beberapa waktu sebelum gambar, dll. dimuat); lagi, sedikit berbeda di Internet Explorer dan di seluruh duniawindow.onload
(yang diterapkan bahkan di browser lama), yang menyala ketika seluruh halaman dimuat (gambar, gaya, dll.)sumber
load
acarawindow
diimplementasikan cukup konsisten di seluruh browser. Masalah yang coba diselesaikan oleh jQuery dan perpustakaan lain adalah yang Anda sebutkan, yaitu bahwaload
acara tersebut tidak diaktifkan hingga semua sumber daya dependen seperti gambar dan stylesheet dimuat, yang bisa lama setelah DOM dimuat sepenuhnya, diberikan dan siap untuk interaksi. Acara yang menyala di sebagian besar browser saat DOM siap disebutDOMContentLoaded
, bukanDOMContentReady
.onload
(ada perbedaan wrt FF / IE / Opera). AdapunDOMContentLoaded
, Anda sepenuhnya benar. Editing untuk mengklarifikasi.document.onload
dapat digunakan). Sejauh window.onload berjalan:window.onload = fn1;window.onload=fn2;
- hanya fn2 yang akan dipanggil onload. Beberapa hosting gratis memasukkan kode mereka sendiri ke dalam dokumen, dan kadang-kadang ini melanggar kode halaman.$(document).ready()
adalah acara jQuery.$(document).ready()
Metode JQuery dipanggil segera setelah DOM siap (yang berarti bahwa browser telah mem-parsing HTML dan membangun pohon DOM). Ini memungkinkan Anda untuk menjalankan kode segera setelah dokumen siap dimanipulasi.Misalnya, jika peramban mendukung acara DOMContentLoaded (seperti yang dilakukan banyak peramban non-IE), maka peramban itu akan diaktifkan pada acara itu. (Perhatikan bahwa acara DOMContentLoaded hanya ditambahkan ke IE di IE9 +.)
Dua sintaks dapat digunakan untuk ini:
Atau versi singkat:
Poin utama untuk
$(document).ready()
:$
denganjQuery
ketika Anda menerima "$ tidak ditentukan."$(window).load()
sebagai gantinya.window.onload()
adalah fungsi JavaScript asli. Thewindow.onload()
peristiwa kebakaran ketika semua konten pada halaman Anda telah dimuat, termasuk DOM (dokumen model objek), iklan banner dan gambar. Perbedaan lain antara keduanya adalah bahwa, sementara kita dapat memiliki lebih dari satu$(document).ready()
fungsi, kita hanya dapat memiliki satuonload
fungsi.sumber
Sebuah Windows beban peristiwa kebakaran ketika semua konten pada halaman Anda sepenuhnya dimuat termasuk DOM (dokumen model objek) konten dan asynchronous JavaScript , frame dan gambar . Anda juga dapat menggunakan body onload =. Keduanya sama;
window.onload = function(){}
dan<body onload="func();">
berbagai cara menggunakan acara yang sama.$document.ready
Acara fungsi jQuery dijalankan sedikit lebih awal dariwindow.onload
dan dipanggil setelah DOM (model objek Dokumen) dimuat pada halaman Anda. Itu tidak akan menunggu untuk gambar, bingkai untuk memuat sepenuhnya .Diambil dari artikel berikut: apa
$document.ready()
bedanya denganwindow.onload()
sumber
sumber
Kata hati-hati saat menggunakan
$(document).ready()
dengan Internet Explorer. Jika permintaan HTTP terputus sebelum seluruh dokumen dimuat (misalnya, saat halaman mengalir ke browser, tautan lain diklik) IE akan memicu$(document).ready
acara.Jika ada kode dalam
$(document).ready()
acara yang mereferensikan objek DOM, ada potensi untuk objek tersebut tidak ditemukan, dan kesalahan Javascript dapat terjadi. Baik menjaga referensi Anda ke objek-objek itu, atau menunda kode yang merujuk objek-objek tersebut ke acara window.load.Saya belum dapat mereproduksi masalah ini di browser lain (khususnya, Chrome dan Firefox)
sumber
Sedikit tip:
Selalu gunakan
window.addEventListener
untuk menambahkan acara ke jendela. Karena dengan begitu Anda dapat mengeksekusi kode di berbagai penangan acara.Kode yang benar:
Kode salah:
Ini karena onload hanyalah properti dari objek, yang ditimpa.
Dengan analogi dengan
addEventListener
, lebih baik menggunakan$(document).ready()
daripada membebani.sumber
Acara
$(document).on('ready', handler)
mengikat ke acara siap dari jQuery. Pawang dipanggil saat DOM dimuat . Aset seperti gambar mungkin masih hilang . Itu tidak akan pernah dipanggil jika dokumen siap pada saat mengikat. jQuery menggunakan DOMContentLoaded -Event untuk itu, meniru jika tidak tersedia.$(document).on('load', handler)
adalah peristiwa yang akan dipecat setelah semua sumber daya dimuat dari server. Gambar dimuat sekarang. Sementara onload adalah acara HTML mentah, ready dibangun oleh jQuery.Fungsi
$(document).ready(handler)
sebenarnya adalah janji . Pawang akan dipanggil segera jika dokumen siap pada saat menelepon. Kalau tidak, ia mengikat keready
-Event.Sebelum jQuery 1.8 ,
$(document).load(handler)
ada sebagai alias untuk$(document).on('load',handler)
.Bacaan lebih lanjut
sumber
$.fn.load
itu tidak berlaku sebagai pengikat acara lagi. Bahkan, itu sudah usang sejak jquery 1.8. Saya memperbaruinya sesuaiIni
$(document).ready()
adalah acara jQuery yang terjadi ketika dokumen HTML telah dimuat penuh, sedangkanwindow.onload
acara terjadi nanti, ketika semuanya termasuk gambar pada halaman dimuat.Juga window.onload adalah peristiwa javascript murni di DOM, sedangkan
$(document).ready()
acara adalah metode di jQuery.$(document).ready()
biasanya pembungkus untuk jQuery untuk memastikan semua elemen dimuat untuk digunakan dalam jQuery ...Lihatlah ke kode sumber jQuery untuk memahami cara kerjanya:
Saya juga telah membuat gambar di bawah ini sebagai referensi cepat untuk keduanya:
sumber
window.onload: Peristiwa JavaScript normal.
document.ready: Peristiwa jQuery tertentu ketika seluruh HTML telah dimuat.
sumber
Satu hal yang perlu diingat (atau harus saya katakan recall) adalah Anda tidak bisa menumpuk
onload
seperti yang Anda bisa lakukanready
. Dengan kata lain, sihir jQuery memungkinkan beberapaready
s pada halaman yang sama, tetapi Anda tidak dapat melakukannya denganonload
.Yang terakhir
onload
akan menolak semua yang sebelumnyaonload
.Cara yang bagus untuk mengatasinya adalah dengan fungsi yang tampaknya ditulis oleh salah satu dari Simon Willison dan dijelaskan dalam Menggunakan Berbagai Fungsi JavaScript Onload .
sumber
Document.ready
(acara jQuery) akan diaktifkan ketika semua elemen berada di tempatnya, dan mereka dapat direferensikan dalam kode JavaScript, tetapi konten belum tentu dimuat.Document.ready
dieksekusi ketika dokumen HTML dimuat.The
window.load
namun akan menunggu halaman yang akan dimuat sepenuhnya. Ini termasuk bingkai bagian dalam, gambar, dll.sumber
Peristiwa document.ready sudah terjadi ketika dokumen HTML telah dimuat, dan
window.onload
acara terjadi selalu nanti, ketika semua konten (gambar, dll) telah dimuat.Anda dapat menggunakan
document.ready
acara jika Anda ingin melakukan intervensi "awal" dalam proses rendering, tanpa menunggu gambar dimuat. Jika Anda membutuhkan gambar (atau "konten" lainnya) siap sebelum skrip Anda "melakukan sesuatu", Anda harus menunggu sampaiwindow.onload
.Misalnya, jika Anda menerapkan pola "Peragaan Slide", dan Anda perlu melakukan perhitungan berdasarkan ukuran gambar, Anda mungkin ingin menunggu hingga
window.onload
. Jika tidak, Anda mungkin mengalami beberapa masalah acak, tergantung pada seberapa cepat gambar akan dimuat. Script Anda akan berjalan bersamaan dengan utas yang memuat gambar. Jika skrip Anda cukup panjang, atau servernya cukup cepat, Anda mungkin tidak melihat masalah, jika gambar tiba tepat waktu. Tetapi praktik paling aman adalah membiarkan gambar dimuat.document.ready
bisa menjadi acara yang menyenangkan bagi Anda untuk menunjukkan beberapa tanda "memuat ..." kepada pengguna, dan setelah ituwindow.onload
, Anda dapat menyelesaikan skrip yang memerlukan sumber daya dimuat, dan akhirnya menghapus tanda "Memuat ...".Contoh: -
sumber
window.onload
adalah fungsi bawaan JavaScript.window.onload
memicu ketika halaman HTML dimuat.window.onload
dapat ditulis hanya sekali.document.ready
adalah fungsi dari perpustakaan jQuery.document.ready
terpicu ketika HTML dan semua kode JavaScript, CSS, dan gambar yang termasuk dalam file HTML dimuat sepenuhnya.document.ready
dapat ditulis beberapa kali sesuai dengan persyaratan.sumber
Ketika Anda mengatakan
$(document).ready(f)
, Anda memberi tahu mesin skrip untuk melakukan hal berikut:$
dan memilihnya, karena tidak dalam lingkup lokal, ia harus melakukan pencarian tabel hash, yang mungkin atau mungkin tidak memiliki tabrakan.ready
objek yang dipilih, yang melibatkan pencarian tabel hash lain ke objek yang dipilih untuk menemukan metode dan memohonnya.Dalam kasus terbaik, ini adalah 2 tabel hash lookup, tapi itu mengabaikan pekerjaan berat yang dilakukan oleh jQuery, di mana
$
kitchen sink dari semua input yang mungkin untuk jQuery, jadi peta lain kemungkinan ada untuk mengirimkan kueri ke handler yang benar.Atau, Anda bisa melakukan ini:
yang mana akan
onload
properti atau tidak dengan melakukan pencarian tabel hash, karena itu, itu disebut seperti fungsi.Dalam kasus terbaik, ini membutuhkan pencarian tabel hash tunggal, yang diperlukan karena
onload
harus diambil.Idealnya, jQuery akan mengkompilasi kueri mereka ke string yang dapat ditempelkan untuk melakukan apa yang Anda inginkan jQuery tetapi tanpa runtime dispatching dari jQuery. Dengan cara ini Anda memiliki opsi untuk keduanya
eval
.sumber
window.onload disediakan oleh DOM api dan ia mengatakan "acara memuat menyala ketika sumber daya yang diberikan telah dimuat".
"Acara memuat diaktifkan pada akhir proses pemuatan dokumen. Pada titik ini, semua objek dalam dokumen berada di DOM, dan semua gambar, skrip, tautan, dan sub-bingkai telah selesai dimuat." DOM memuat
Tetapi dalam jQuery $ (document) .ready () hanya akan berjalan setelah halaman Document Object Model (DOM) siap untuk dieksekusi kode JavaScript. Ini tidak termasuk gambar, skrip, iframe dll. Jquery ready event
Jadi metode siap jquery akan berjalan lebih awal dari acara dom onload.
sumber