2017-01-18 28 views
0

我這裏有一個plunker - https://plnkr.co/edit/RZTF9uda8Cw2YQx8Gs1Y?p=preview的JavaScript - nubie,window.onlaod和IIFE

其上的一個按鈕

隨着在window.onload它的工作原理,但不與IIFE一個簡單的事件。

我以爲IIFE會運行一旦它的創建,所以是不是像一旦窗口已經加載?

// (function(){ 

    // var btn = document.getElementById('btn1'); 

    // btn.addEventListener('click', function(){ 
    //  alert('Hi'); 
    // }) 

    // })(); 


    window.onload = function(){ 

     var btn = document.getElementById('btn2'); 

     btn.addEventListener('click', function(){ 
     alert('Hi'); 
     }) 

    }; 

回答

2

我認爲一旦其創建

是的,當然IIFE將運行。 (它的名字已經有點...)

那麼是不是像一旦窗口已經加載?

而這就是問題

你的腳本資源被嵌入到頭部,這意味着它在執行時,你試圖通過它的ID選擇的HTML元素還不存在。

因此,您需要在元素存在(窗口加載,DOMContentReady)之後執行此操作,或在之後嵌入相關HTML元素後的外部腳本資源。 (無論如何,放置腳本到底是一個普遍的性能建議。)

+1

「將運行一次它的創建」 - 對於「值」等於*函數*而不是*元素*。 – Quentin

+0

@Quentin是的,當然;我認爲這也是OP的意思。 – CBroe