簡體   English   中英

事件處理程序可在IE11或Chrome中使用,但不能同時使用

[英]Event handlers work in IE11 or Chrome, but not both

在代碼庫中,我幫助維護了這種形式的功能(為簡潔起見,將其簡化):

function setListeners(enable) {
    const fn = enable ? document.body.addEventListener : document.body.removeEventListener;

    fn('click', foo);
    fn('MyCustomEvent', bar);
}

IE11拋出Illegal Invocation ,而其他瀏覽器運行良好。 另一個維護者將該功能切換為以下形式:

function setListeners(enable) {
    const fn = enable ? document.body.addEventListener : document.body.removeEventListener;

    fn.call(document.body, 'click', foo);
    fn.call(document.body, 'MyCustomEvent', bar);
}

現在它可以在IE11中使用,但不能在Chrome中使用。 我們已經有一個用於CustomEvent的polyfill(具有如圖所示的隱含用法),但是還有什么其他阻止此功能跨瀏覽器停留的原因呢?

您的第二個代碼段應該沒問題。 這是一個有效的示例(已在Chrome中為我成功測試):

 const fn = document.body.addEventListener; fn.call(document.body, 'MyCustomEvent', e => { console.log('MyCustomEvent', e.detail); }); document.body.dispatchEvent(new CustomEvent('MyCustomEvent', { detail: 'it worked!' })); 

也許您的CustomEvent polyfill妨礙了您的工作,或者還有其他未顯示的因素在起作用?

暫無
暫無

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

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