我的onload听众似乎没有工作

时间:2015-04-17 00:44:14

标签: javascript html dom firebug event-listener

我知道我在这里遗漏了一些东西,但我的页面工作正常......

我有一个与init()绑定的简单window.onload函数。 init()正在解雇,但我得到一个奇怪的错误,例如它无法读取DOM元素本身。我可以弹出Firebug并从控制台运行init(); 正常工作。看来我没有使用正确的onload监听器。还有更好的吗?此外,这可能是由于我使用了document.getElementsByClassName()

这是错误(然后我将init()放入控制台): Firebug displaying the error message plus the manual call to <code>init()</code>

以下是我的相关代码:

... // There is more code, I just didnt include it.

  window.addEventListener("onload", init(), false);

  function init(){
    populateText();
    populateLinks();
    populateIcons();
  }

  function populateText(){
    var texts = document.getElementsByClassName("text");
    for (i = 0; i < data.links.length; i++) {
      texts[i].innerHTML = data.links[i].text;
    }
  }

  function populateLinks(){
    var links = document.getElementsByClassName("link");
    for (i = 0; i < data.links.length; i++) {
      links[i].href = data.links[i].link;
    }
  }

  function populateIcons(){
    var icons = document.getElementsByClassName("icon");
    for (i = data.links.length; i > 0; i--) {
      icons[(data.links.length-i)].src = "screens/screen ("+i+").png";
    }
  }
  </script>
</head>
<body>
  <div id='iconLinks'>
    <ul>
      <li>
        <a class="link" href="" target="_blank">
          <div class="text"></div>
          <img class="icon" src=""/>
        </a>
      </li>
      <li>
      <a class="link" href="" target="_blank">
        <div class="text"></div>
        <img class="icon" src=""/>
      </a>
    </li>
    <li>
      <a class="link" href="" target="_blank">
        <div class="text"></div>
        <img class="icon" src=""/>
      </a>
    </li>
    <li>
      <a class="link" href="" target="_blank">
        <div class="text"></div>
        <img class="icon" src=""/>
      </a>
    </li>
    <li>
      <a class="link" href="" target="_blank">
        <div class="text"></div>
        <img class="icon" src=""/>
      </a>
    </li>

... // There is more code, I just didnt include it.

2 个答案:

答案 0 :(得分:3)

您需要将函数引用传递给addEventListener()。事件名称也是load,而不是onload。所以电话应该是这样的:

window.addEventListener("load", init, false);

(您也可以省略false作为第三个参数,因为这是默认值。)

在您的情况下,首先调用init(),然后将其返回值(undefined)传递给onload事件的处理程序。

答案 1 :(得分:2)

如果你想加载你的函数,直到你的整个DOM加载完成:

JS:

<script>
window.onload = function(){
  populateText();
  populateLinks();
  populateIcons();
}
</script>

JQuery的:

$(window).on("load", function() {
  populateText();
  populateLinks();
  populateIcons();
})