开发者问题收集

为什么我 getElementById 时得到的是 null?

2017-09-29
59

我是 JS 新手,正在阅读 Javascript Dom,正在尝试理解书中的一个示例!

这是我的 html 代码

<!DOCTYPE html>
<html lang ="en">
    <head>
        <meta charset="utf-8" />
        <title>Image Gallery</title>
    </head>
    <body>

        <script type = "text/javascript"  src="showPic.js"></script>
<h1>Snapshots</h1>
        <ul id = "image">
        <li>
            <a href="images/fall.JPG"   title = "water display"> Fall</a>
        </li>

        <li>
            <a href="images/sun.JPG"  title = "sunshine"> Sunshine</a>
        </li> 

        <li>
            <a href="images/tree.jpg"  title = "tree"> Green</a>
        </li> 

        <li>
            <a href="images/yellow.JPG"  title = "yellow sun">Filter</a>
        </li>  

      </ul>  
       <img id = "placeholeder" src="images/rise.jpg" alt = "my image gallery"/>  
        <p id="description"> Choose an image</p>
    </body>
</html>

这是我的 javaScript 代码

function showPic(whichPic) {
    var source = whichPic.getAttribute("href");
    var placeholder = document.getElementById("placeholeder");
    placeholder.setAttribute("src", source);
    description.firstChild.nodeValue = text;
   }

    var text = whichPic.getAttribute("title");
    var description = document.getElementById("description");
    function perpareGallery() {
        var gallery = document.getElementById("image");
        var links = gallery.getElementsByTagName("a");

        for(var i = 0 ; i<links.length; i++) {
            links[i].onclick = function() {
                showPic(this);
                return false;
            }
        }   
    }

我的代码没有从 id = image 中获取任何内容。我检查了很多次都不知道哪里出了问题……

2个回答

似乎没有实际运行 perpareGallery() 函数的代码。

修复该问题后,如果在解析和呈现 HTML 中的元素(如 a 元素)之前运行 perpareGallery() ,它可能仍然不起作用。因此,您可能需要执行类似以下操作:

window.onload = prepareGalery;

尽管有更好的方法来设置事件,但这会在解析所有 HTML 后运行您的函数。

Rednael
2017-09-29

关于如何追踪您的问题的两条建议:

1) 所有浏览器都有所谓的 javascript 控制台 。它会显示代码中的所有语法错误。对于 Firefox 和 Chromium,键盘快捷键 F12 可将其打开/关闭

如果您运行代码并打开 javascript 控制台,您将看到此错误:

ReferenceError: whichPic is not defined

在您的示例中,行 var text = whichPic.getAttribute("title"); 似乎属于函数 showPic(whichPic) ,但事实并非如此。

2) 您应该格式化代码以免迷失方向。您当前的代码格式为:

function showPic(whichPic) {
  var source = whichPic.getAttribute("href");
  var placeholder = document.getElementById("placeholeder");
  placeholder.setAttribute("src", source);
  description.firstChild.nodeValue = text;
}

var text = whichPic.getAttribute("title");
var description = document.getElementById("description");

function perpareGallery() {
  var gallery = document.getElementById("image");
  var links = gallery.getElementsByTagName("a");

  for(var i = 0 ; i<links.length; i++) {
    links[i].onclick = function() {
      showPic(this);
      return false;
    }
  }
}

如果您现在查看格式化的代码,它看起来不再像 whichPicshowPic(whichPic) 内部使用,而是在范围之外。这个错误完全合理。

您可能希望在使用它之前将其移到函数内部。

dahrens
2017-09-29