簡體   English   中英

如果在設置偵聽器之前觸發了DOMContentLoaded事件,則如何檢索“事件”對象

[英]How to retrieve the `event` object if the DOMContentLoaded event has been triggered before setting a listener

有沒有一種方法可以檢索DOMContentLoaded事件的event對象,即使該event對象已在設置eventListener之前被觸發?

我發現了DOMContentLoaded一些計時數據,並希望事件數據也可以存儲。

window.performance.timing.domContentLoadedEventStart
window.performance.timing.domContentLoadedEventEnd

我想將event對象傳遞給我的回調,無論它是直接調用還是作為event監聽器的結果。

var callback = function(event){
    console.log(event)
}
if (document.readyState !== "loading") {
    var event = window.DOMContentLoadedEvent; // doesnt exist
    callback.call(this, event);
} else {
    document.addEventListener('DOMContentLoaded', callback, false)
}

我想我可以創建一個新對象並返回該對象,但我希望代碼盡可能小。

var event = {
    srcElement: document,
    target:document,
    timeStamp:window.performance.timing.domContentLoadedEventEnd,
    type:"DOMContentLoaded",
}
callback.call(this, event);

我要做的是添加另一個事件偵聽器,如果觸發該事件偵聽器,該偵聽器肯定會在DOMContentLoaded事件之前注冊,該處理程序將存儲該event對象。

document.addEventListener('DOMContentLoaded', function(event){
    window.DOMContentLoadedEvent = event; 
});

編輯

我的代碼是一個非常簡單的domready函數

document.addEventListener('DOMContentLoaded', function(event){
    window.DOMContentLoadedEvent = event; 
});
domready = function(callback) {

    if (document.readyState === "loading") {
      return document.addEventListener('DOMContentLoaded', callback, false);
    }
    return callback.call(this, window.DOMContentLoadedEvent);
}

以下代碼可能駐留在外部腳本中,並且在觸發DOMContentLoaded事件后將其插入。

domready(function(event){
    console.log(event)
});

是否可以在不設置其他事件偵聽器的情況下檢索event數據?

檢查一下:

<body>
...
<script>

    var DOMevent; // global variable

    document.addEventListener('DOMContentLoaded', function(event) {
        DOMevent = event; // save it
    }, false);

    window.addEventListener('load', function () {
        processEvent(DOMevent);  // works fine
    }, false);

    function processEvent(e) {
        console.log(e);
    }
</script>
</body>

console.log(e); 將顯示DOMevent

有關readyState更多信息

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/readyState

有關DOMContentLoaded事件的更多信息

https://developer.mozilla.org/zh-CN/docs/Web/Events/DOMContentLoaded

有關“加載”事件的更多信息

例如https://developer.mozilla.org/zh-CN/docs/Web/Events/load * typo! document -> window

暫無
暫無

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

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