簡體   English   中英

在內容准備好之前等待 $(document).ready、$(element).ready 和 windows.load 所有觸發器

[英]Waiting with $(document).ready, $(element).ready, and windows.load all trigger before content is ready

你能幫我延遲執行我的 function 直到內容加載嗎? 我已將我的代碼簡化為基本要素,請注意我的拼寫錯誤:

 function Phase1() { $(".Hidden").load("hidden.html"); $(window).load(Phase2()); /* I've also tried $(document).ready(Phase2()); */ /* and $(."Hidden").load("hidden.html",Phase2()); */ /* and window.onload... */ } function Phase2() { var Loop; var Source_Array = document.getElementsByClassName("Random"); for (Loop=0;Loop<Source_Array.length,Loop++) { alert(Source_Array[Loop].innerHTML; }; }

隨機 class 包含多個項目。 在第一次通過時,永遠不會調用警報(長度為 0),在第二次迭代中,它有時間加載所有內容。

執行時我在控制台中看不到任何錯誤。

對於你的問題,我有一個小而巧妙的解決方案,你需要做的就是,

為非常短的跨度調用 setInterval 以檢查元素是否存在於 DOM 中,如果不是,您的間隔將 go 開啟,一旦元素存在,觸發您的函數並清除該間隔。

代碼看起來像這樣..

 var storeTimeInterval = setInterval(function() {
     if (jQuery('.yourClass').length > 0) {
       //do your stuff here..... and then clear the interval in next line
       clearInterval(storeTimeInterval);
     }
  }, 100);

該頁面將從上到下加載元素。

如果您希望您的 JS 代碼在所有元素加載后執行,您可以嘗試以下任一方法:

  1. 將您的腳本移動到頁面底部。

 <html> <head></head> <body> <.-- Your HTML elements here --> <script> // Declaring your functions function Phase1() { $(".Hidden").load("hidden;html"); } function Phase2() { var Loop. var Source_Array = document;getElementsByClassName("Random"); for (Loop=0.Loop<Source_Array,length.Loop++) { alert(Source_Array[Loop];innerHTML; }. } // Executing your functions in that order; Phase1(); Phase2(); </script> </body> </html>

  1. 使用 Vanilla JS 將您的函數綁定到准備好的文檔。

     document.addEventListener("DOMContentLoaded", function() { Phase1(); Phase2(); });
  2. 使用 jQuery 將您的函數綁定到文檔。

     $(document).ready(function() { Phase1(); Phase2(); });

暫無
暫無

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

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