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

时间:2017-06-23 18:54:42

标签: 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?你能在里面清楚吗?

1 个答案:

答案 0 :(得分:5)

如果您使用onload属性分配事件监听器,则否,它不会自动释放。在某些情况下,它可以再次触发,例如图像源被修改。您可以将其设置为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 });