开发者问题收集

使用 .getElementById 抓取元素时为空

2014-02-21
160

我试图抓取一个元素(一个按钮)并在其上添加一个事件侦听器。 每当我运行

var button = document.getElementById('clickMe');
console.log(button); // null

我检查我的 javascript 文件是否正在加载,并检查所有内容是否区分大小写。这是我的 html 和 JS 文件:

HTML:

<!doctype html>
<html>
  <head>
    <script src="js/timer.js"></script>
  </head>
  <body>
        <button id='clickMe' type='button'>Hello</button>
  </body>
</html>

JS

var button = document.getElementById('clickMe');
console.log(button);
function buttonClicked () {
  alert('the button was clicked');
}

button.addEventListener('click', buttonClicked);

function timerComplete () {
  alert('timer complete');
}

setTimeout(timerComplete, 2000);

我发现的最常见错误是驼峰式大小写 getelementbyid,我就是这样做的。

有人知道为什么我一直得到 null 吗?它是否试图在加载之前抓取元素?

1个回答

在将按钮添加到 DOM 之前,会执行您的 Javascript 代码。您可以将 HTML 更改为:

<!doctype html>
<html>
  <body>
        <button id='clickMe' type='button'>Hello</button>
        <script src="js/timer.js"></script>
  </body>
</html>

或者更好的是,如果您不介意让您的 JS 代码更复杂一些,您可以等待 dom 元素加载后再执行该部分代码:

document.addEventListener('DOMContentLoaded', function() {
   var button = document.getElementById('clickMe');
   console.log(button);
});

如果您使用此 JS,您可以将脚本标记放回头部

Emilio Rodriguez
2014-02-21