javascript - 尝试用“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>
解决方案
explosion()
您已经分配了to myImg
(和 to的返回值document.getElementById("imgMine").onclick
,但这并不真正相关)。
explosion
没有return
声明,所以它返回undefined
.
因此“无法设置未定义的属性'src'”。
这与 using而let
不是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>
推荐阅读
- vue.js - v-cloak 在加载页面时不会隐藏组件
- reactjs - Typescript 根据变量动态分配泛型类型
- c# - 代表。它们是指其他委托的实例,还是只是方法?
- php - Laravel 5.5 Redis - 需要 NOAUTH 身份验证
- ios - 在 Flutter 中设置 TextField 的最大长度后如何设置输入限制文本?
- mysql - 这是 MariaDB 中 ROUND 功能的故障吗?
- javascript - 每秒添加课程,但仅持续 5 秒。[JavaScript]
- java - 如何将 SQS 大型消息处理与 Gradle 一起用于我的 AWS Lambda 函数?
- git - Docker,从 git repo 安装 pip 找不到 git
- npm - Gatsby 开发命令不起作用,显示 TypeError: is.urlInstance is not a function