开发者问题收集

无法仅使用 Javascript 更改 img 标签内的 id 或 src 属性

2018-12-17
257

我是 Javascript 的新手,正如所料,我遇到了困难。 我不知道我做错了什么…… 也许我的 CDN 声明是无序的? 我检查了我的 js 语法很多次,就是找不到问题所在…… 请问有人能帮忙吗?

任务:仅使用 Javascript 更改 img src 和 id 属性(HTML5)。

我的 HTML:

<head>
<!--CDN-->
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" ></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" ></script>
<script src="https://unpkg.com/tooltip.js"></script>

<script>
    window.onload = function imgChanger() {
        let bonanza = 0;
        let a;
        let b;
        try {
            a = document.getElementById("bla");
            bonanza = 1;
        } catch (error) {
            console.log("This elemente with id=bla doesn't exists.");
        }
        try {
            b = document.getElementById("ble");
            bonanza = 2;
        } catch (error) {
            console.log("This elemente with id=ble doesn't exists.");
        }
        if (bonanza == 1) {
            document.getElementById("bla").src = "CORRECT PATH TO IMG 01";
            document.getElementById("bla").id = "ble";
        }
        if (bonanza == 2) {
            document.getElementById("ble").src = "CORRECT PATH TO IMG 02";
            document.getElementById("ble").id = "bla";
        }
    }
</script>

. . .

<body>
    <button id="xBtnOne" onclick="imgChanger()">
        <img id="bla" src="CORRECT PATH TO IMG 01"></img>
    </button>
</body>

. . .

控制台错误:未捕获的 TypeError:无法在 imgChanger 处设置 null 的属性“src”。

而且,那个该死的按钮什么也没做,只是让我哭了……

谢谢大家的时间……

2个回答

代码中的 try/catch 块永远不会抛出错误。因此 bonanza 的值将始终为 2。 因此,当

document.getElementById("ble").src

运行此语句时,document.getElementById("ble") 将返回 null,因为 id 为 bla。因此出现错误“src of null”。

您可以尝试以下操作:

<html>

<head>
  <!--CDN-->
  <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
  <script src="https://unpkg.com/tooltip.js"></script>

  <script>
    window.onload = function imgChanger() {
      let bonanza = 0;
      let a;
      let b;
      a = document.getElementById("bla");
      b = document.getElementById("ble");
      bonanza = a ? 1 : 2;
      if (bonanza == 1) {
        document.getElementById("bla").src = "CORRECT PATH TO IMG 01";
        document.getElementById("bla").id = "ble";
      }
      if (bonanza == 2) {
        document.getElementById("ble").src = "CORRECT PATH TO IMG 02";
        document.getElementById("ble").id = "bla";
      }
    }
  </script>
</head>

<body>
  <button id="xBtnOne" onclick="imgChanger()">
        <img id="bla" src="CORRECT PATH TO IMG 01">
    </button>
</body>

</html>

此外,没有必要使用结束图像标签。 它是一个单例标签,即不需要结束标签即可有效的标签。

rishabh0211
2018-12-17

b = document.getElementById("ble"); 将返回 null 并且不会使程序崩溃,直到您尝试为其设置某些内容,因为 HTML 中似乎没有带有 id ble 的对象。此外,图像转换器在单击时不起作用,仅在加载时运行。

Thomas Braccia
2018-12-17