代码之家  ›  专栏  ›  技术社区  ›  David Mason

window.onload似乎在加载DOM之前触发(JavaScript)

  •  8
  • David Mason  · 技术社区  · 16 年前

    我在这方面有困难 window.onload document.onload 事件。我读到的每一篇文章都告诉我,在DOM完全加载其所有资源之前,这些都不会触发,似乎我不会这样做:

    我在chrome4.1.249.1036(41514)和ie8.0.7600.16385中尝试了以下简单的页面,得到了相同的结果:两个页面都显示消息“It failed!”,表明 myParagraph 未加载(因此DOM似乎不完整)。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
        <head>
            <script type="text/javascript">
                window.onload = doThis();
                // document.onload gives the same result
    
                function doThis() {
                    if (document.getElementById("myParagraph")) {
                        alert("It worked!");
                    } else {
                        alert("It failed!");
                    }
                }
            </script>
        </head>
    
        <body>
            <p id="myParagraph">Nothing is here.</p>
        </body>
    </html>
    

    window.onload文件 将计时器设置为运行半秒 doThis() ,但这似乎是一个不雅观的解决方案,并没有回答为什么的问题

    是否有更合适的事件可供使用?

    5 回复  |  直到 6 年前
        1
  •  9
  •   Li0liQ    14 年前

    <script type="text/javascript">
        window.onload = function(){
            window.document.body.onload = doThis; // note removed parentheses
        };
    
        function doThis() {
            if (document.getElementById("myParagraph")) {
                alert("It worked!");
            } else {
                alert("It failed!");
            }
        }
    </script>
    

    测试工作在FF/IE/Chrome,虽然考虑处理 document.onload

    如前所述,使用js框架将是一个更好的主意。

        2
  •  10
  •   Darren user513543    14 年前

    window.onload = doThis; 而不是 window.onload = doThis();

        3
  •  8
  •   OverCoder    9 年前

    () 是一个 ,就像 + && . () 获取函数并调用它。

    所以在这种情况下, doThis () 是调用函数的运算符。 doThis() 合并到一起调用 ,执行它,并计算为的返回值 多蒂斯

    window.onload = doThis() 基本上是分配 多蒂斯 window.onload

    因此,要解决这个问题,需要引用函数本身,而不是调用它。

    window.onload = doThis

        4
  •  1
  •   M4N    16 年前

    jQuery 而且它是 $(document).ready() 功能:

      $(document).ready(function() {
          // put all your jQuery goodness in here.
      });
    
        5
  •  1
  •   Community Mohan Dere    9 年前

    这取决于onload函数的位置(head或body标记或更下一步),不同浏览器的内部事件绑定似乎略有不同。

    另请参见 window.onload vs document.onload