javascript - onload 事件处理程序是否在执行后自动释放?

标签 javascript html

图片之类的onload事件在匿名时执行后是否释放?

就像你这样做的时候

var tempImg = new Image()
tempImg.onload = function () {
   alert("loaded");
}
tempImg.src = "https://images.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";

或者这个

<img id='img' />
<script>    
    var tempImg = document.getElementById("img")
    tempImg.onload = function () {
       alert("loaded");
    }
    tempImg.src = "https://images.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
</script>

是否必须以某种方式清除它以防止在其他地方更改图像时事件再次触发?如果是这样,正确的方法是什么?只是设置为undefined?你能自己清除它吗?

最佳答案

如果您使用 onload 属性分配事件监听器,那么<​​strong>不会自动释放。它可以在某些情况下再次触发,例如修改图像源。您可以通过将其设置为 undefinednulldelete 属性来清除它。这可以在事件处理函数本身内部完成:

image.onload = function(event) {
  delete image.onload;
  /* do something */
};

如果您正在使用 addEventListener() 来处理事件,您将需要使用 removeEventListener()。我们可以为函数添加一个内部名称,以便我们可以引用它:

image.addEventListener('load', function myLoadHandler(event) {
  image.removeEventListener(myLoadHandler);
  /* do something */
});

然而,在较新的浏览器中,有一个比这两个更好的选择。您可以使用新的 once 选项定义一个自动删除自身的事件监听器:

image.addEventListener('load', function(event) {
  /* do something */
}, { once: true });

关于javascript - onload 事件处理程序是否在执行后自动释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44728228/

相关文章:

javascript - 无法弄清楚为什么 undefined 出现在两个期望的结果之间

html - 如何对齐列表元素之间的空间

javascript - 点击显示表单,平滑过渡

javascript - 无法限制WebRTC P2P多人接收带宽

html - 使用 HTML 和 CSS 编码创建组织结构图

javascript - 如何添加标签/标签以显示在多个对象的顶部,以便在用户单击对象时标签始终面向相机?

javascript - 数据集导入后添加HTML元素

javascript - Internet Explorer 及其错误之一

javascript - 退格键的事件代码是什么?

python - 使用Python请求模块提交不输入名称的表单