簡體   English   中英

執行后是否會自動釋放onload事件處理程序?

[英]Are onload event handlers automatically released after execution?

是匿名時執行的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屬性分配事件偵聽器,則為no,它不會自動釋放 在某些情況下,它可以再次觸發,例如圖像源被修改。 您可以通過將其設置為undefinednulldelete屬性來清除它。 這可以在事件處理函數本身內完成:

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

如果您使用addEventListener()來處理事件,則需要使用removeEventListener() 我們可以為函數添加一個內部名稱,以便我們可以引用它:

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

但是,在較新的瀏覽器中,有一個比其中任何一個更好的選擇。 您可以定義一個事件偵聽器,它將使用new once選項自動刪除自身:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM