2017-05-29 109 views
0

我用下面的代碼做了一個自定義事件:當我觸發與參數自定義事件,從事件處理函數的參數是未定義

function DataLoader() { 
 
    let el = document.createElement('section'); 
 

 
    setTimeout(function() { 
 
    el.dispatchEvent(new CustomEvent('myevent', { 
 
     number: 123 
 
    })); 
 
    }, 3000); 
 

 
    return el; 
 
} 
 

 
// With code below I add my event listener. 
 

 
let loader = new DataLoader(); 
 

 
loader.addEventListener('myevent', function(e) { 
 
    console.log(e.number); // ← `e.number` is `undefined` when event is triggered. 
 
}); 
 

 
document.body.appendChild(loader);

當被觸發的情況下,變量e.numberundefined。我做錯了什麼?我沒有使用JQuery。 See this codepen

+0

@Mr_Perfect:我跟隨在指導[本條](https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events#Creating_events) –

+0

告訴我你想要做什麼? –

+0

@Mr_Perfect:如果觸發事件,必須將數字「123」發送給處理程序以繼續初始化過程,並且該過程需要在DataLoader函數中加載的數據。 –

回答

3

當您創建對象new DataLoader()並聲明let el時,el始終未定義。

所以你必須給它分配一些值。 你必須做這樣的事情

function DataLoader(elem) { 
    let el = elem; 

    //When data is loaded { 
     el.dispatchEvent(new CustomEvent('myevent', { number: 123 })); 
    //} 

    return el; 
} 

,然後創建對象像

loader = new DataLoader(document.body); 

欲瞭解更多信息CustomEvent MDN

您的代碼還不清楚。根據您的要求做這樣的事情。

var obj = document.createElement('section') 
obj.addEventListener("cat", function(e) { console.log(e.detail)}); 

// create and dispatch the event 
var event = new CustomEvent("cat", { 
    detail: { 
    hazcheeseburger: true 
    } 
}); 
obj.dispatchEvent(event); 
+0

哦,這是我提出問題時的一個問題。我已經改變了我的代碼,所以我不清楚我在做什麼。但你說的好點。我已經更新了我的問題。 –

+0

我發現它太早了,事實上就是這樣。謝謝 :) –

相關問題