簡體   English   中英

document.ready中window.load事件上的domlistener

[英]domlistener on window.load event inside document.ready

盡管window.load在准備好后仍然可以工作,但該代碼仍無法工作。

$(document).ready(function(){google.maps.event.addDomListener(window,'load',function(){InitializeMap();});;

But If I write the code outside the ready function, it works fine.

$(document).ready(function () {
    InitializeMap(); });

This code also works nice.

這是一個與jQuery相關的問題。 jQuery使用其自己的內部延遲對象來表示“就緒”回調函數的列表。 在此延遲的對象內,可能出於各種原因而設置了超時,也可能未設置超時,在某些情況下window.onload被取消,甚至更多。 jQuery會做所有這些事情以確保跨瀏覽器的一致性。 從jQuery文檔中:

請注意,盡管DOM在頁面完全加載之前總是准備就緒,但是在.ready()處理程序期間執行的代碼中附加加載事件偵聽器通常並不安全。 例如,可以使用$ .getScript()之類的方法在頁面加載很長時間之后動態地加載腳本。 盡管.ready()添加的處理程序將始終在動態加載的腳本中執行,但是窗口的load事件已經發生,並且這些偵聽器將永遠不會運行。

參考

下面的普通JavaScript解決方案可以按您期望的那樣工作,因為jQuery的相同代碼實現中並沒有所有其他麻煩:

 document.addEventListener('DOMContentLoaded', () => { google.maps.event.addDomListener(window, 'load', function() { alert('custom event'); }); }); 
 <script src="https://maps.googleapis.com/maps/api/js?v=3"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM