Saya ingin memanggil fungsi setelah dokumen dimuat, tetapi dokumen mungkin atau mungkin belum selesai memuat. Jika itu memuat, maka saya bisa memanggil fungsi. Jika TIDAK dimuat, maka saya dapat melampirkan pendengar acara. Saya tidak dapat menambahkan daftar acara setelah onload telah dipecat karena tidak akan dipanggil. Jadi bagaimana saya bisa mengecek apakah dokumen sudah dimuat? Saya mencoba kode di bawah ini tetapi tidak sepenuhnya berfungsi. Ada ide?
var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if (body && body.readyState == 'loaded') {
DoStuffFunction();
} else {
// CODE BELOW WORKS
if (window.addEventListener) {
window.addEventListener('load', DoStuffFunction, false);
} else {
window.attachEvent('onload', DoStuffFunction);
}
}
javascript
events
onload
addeventlistener
Marcos
sumber
sumber
Jawaban:
Tidak perlu untuk semua kode yang disebutkan oleh galambalazs. Cara lintas-browser untuk melakukannya dalam JavaScript murni hanya dengan menguji
document.readyState
:Ini juga bagaimana jQuery melakukannya.
Bergantung pada tempat JavaScript dimuat, ini dapat dilakukan di dalam interval:
Bahkan,
document.readyState
dapat memiliki tiga negara:Jadi, jika Anda hanya perlu DOM untuk siap, periksa
document.readyState === "interactive"
. Jika Anda perlu seluruh halaman siap, termasuk gambar, periksadocument.readyState === "complete"
.sumber
document.readyState == "complete"
, artinya semuanya, termasuk gambar, telah dimuat.document.readyState
untuk memastikan fungsi dimulai setelah DOM telah diuraikan, atau yang lebih baru, tergantung pada saat dipanggil. Apakah ada acara interaktifreadyState
?/loaded|complete/.test(document.readyState)
. Beberapa browser diaturdocument.readyState
ke "dimuat" alih-alih "lengkap". Juga, document.readyState TIDAK memastikan font telah dimuat, tidak ada cara yang sangat baik untuk menguji tanpa plugin.document.onreadystatechange
? Ini tampak lebih ramping jika browser mendukungnya. stackoverflow.com/questions/807878/…document.readyState !== "loading"
, untuk keadaan "DOM ready". Ini mencegah masalah muncul jikareadyState
diperiksa terlambat karena alasan tertentu (setelah keadaan "interaktif").Tidak perlu perpustakaan. jQuery menggunakan skrip ini untuk sementara waktu, btw.
http://dean.edwards.name/weblog/2006/06/again/
sumber
init
tidak akan berjalan jika kode yang Anda posting dimasukkan setelah halaman telah dimuat, yang merupakan poin OP: ia tidak dapat mengontrol kapan skripnya disertakan. (perhatikan bahwa hanyasetInterval
cabang yang akan bekerja)Anda mungkin ingin menggunakan sesuatu seperti jQuery, yang membuat pemrograman JS lebih mudah.
Sesuatu seperti:
Tampaknya akan melakukan apa yang Anda cari.
sumber
ready()
dipanggil setelah pemuatan dokumen, fungsi yang diteruskan dijalankan segera.sumber
document.loaded
selalu tidak ditentukanbody.readyState === 'loaded'
Jika Anda benar-benar ingin kode ini dijalankan dimuat , bukan di domready (yaitu Anda perlu memuat gambar juga), maka sayangnya fungsi siap tidak melakukannya untuk Anda. Saya biasanya hanya melakukan sesuatu seperti ini:
Sertakan dalam javascript dokumen (yaitu selalu dipanggil sebelum onload dipecat):
Kemudian kode Anda:
(Atau yang setara dalam kerangka preferensi Anda.) Saya menggunakan kode ini untuk melakukan pendahuluan tentang javascript dan gambar untuk halaman selanjutnya. Karena hal-hal yang saya dapatkan sama sekali tidak digunakan untuk halaman ini, saya tidak ingin itu lebih diutamakan daripada mengunduh gambar dengan cepat.
Mungkin ada cara yang lebih baik, tetapi saya belum menemukannya.
sumber
Mozila Firefox mengatakan itu
onreadystatechange
adalah alternatif untukDOMContentLoaded
.Dalam
DOMContentLoaded
dokumen Mozila mengatakan:Saya pikir
load
acara harus digunakan untuk memuat dokumen lengkap + sumber daya.sumber
Yang di atas dengan JQuery adalah cara termudah dan sebagian besar digunakan. Namun Anda dapat menggunakan javascript murni tetapi mencoba untuk mendefinisikan skrip ini di kepala sehingga dibaca di awal. Apa yang Anda cari adalah
window.onload
acara.Di bawah ini adalah skrip sederhana yang saya buat untuk menjalankan penghitung. Penghitung kemudian berhenti setelah 10 iterasi
sumber
Coba ini:
sumber
Saya punya solusi lain, aplikasi saya harus dimulai ketika objek baru MyApp dibuat, jadi sepertinya:
itu bekerja pada semua browser, yang saya tahu.
sumber