首页 > 解决方案 > 尝试用“let”替换“var”时未捕获的 TypeError

问题描述

我在下面的代码片段中收到此错误。

Uncaught TypeError: Cannot set property 'src' of undefined

我正在尝试使用“let”来声明一个变量。所以没有办法利用吊装。如果我在变量声明之后声明函数,又会引发另一个问题。请让我知道该怎么做?

<img id="imgMine" src = img.png> 
<script>
let myImg;
function explosion (){
    myImg.src = "";//**<-- Uncaught TypeError: Cannot set property 'src' of undefined**
}
myImg= document.getElementById("imgMine").onclick = explosion();
</script>

标签: javascript

解决方案


explosion()您已经分配了to myImg(和 to的返回值document.getElementById("imgMine").onclick,但这并不真正相关)。

explosion没有return声明,所以它返回undefined.

因此“无法设置未定义的属性'src'”。

这与 usinglet不是var.


看起来您正在尝试设置src图像元素的属性。如果你想这样做,那么你需要将图像元素分配给变量。

myImg = document.getElementById("imgMine");

看起来您还想将该explode函数分配为单击事件侦听器。为此,您需要分配函数本身,而不是调用函数的结果。失去().

myImg.onclick = explode;

或者你可以使用现代成语:

myImg.addEventListener("click", explode);

也就是说,图像并非旨在成为交互式控件。虽然您可以向其添加点击事件处理程序,但它不会在辅助技术(如屏幕阅读器)中显示为可点击,也不会在没有指点设备的情况下导航(许多人通过页面中的交互元素进行选项卡)。

简而言之,您正在做的事情是非常难以访问的(这可能会导致您出现法律问题)。

您应该使用设计为可点击的元素,例如按钮。

let myImg;

function explosion() {
  myImg.querySelector("img").src = "";
}

myImg = document.getElementById("imgMine");
myImg.addEventListener("click", explosion);
button {
  border: 0;
  background: transparent;
  margin: 0;
  padding: 0;
}
<button type="button" id="imgMine"><img src="https://placeimg.com/200/100/tech"></button>


推荐阅读