You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

被动事件监听器中无法调用preventDefault的报错修复求助

报错修复:Unable to preventDefault inside passive event listener due to target being treated as passive

报错原因

这个错误是因为浏览器将你的事件监听器设为了被动模式(passive),在这种模式下,浏览器禁止调用event.preventDefault(),目的是优化滚动这类高频事件的性能,避免页面卡顿。

修复方法

方法一:修改调用stop方法的方式

如果你能找到调用这个stop函数的地方,直接给第二个参数传true,这样就会跳过preventDefault()的执行,自然不会报错。
比如原来的调用代码是:

stop(event);

改成:

stop(event, true);

这样既保留了阻止事件冒泡的功能,又不会触发报错的代码逻辑。

方法二:修改stop方法本身(如果不能改调用方式)

直接修改你提供的stop函数,在调用preventDefault()之前,先判断事件是否允许取消默认行为(通过event.cancelable属性),只有允许的时候才执行该方法。修改后的代码如下:

/**
* Method: stop
* Stops an event from propagating.
*
* Parameters:
* event - {Event}
* allowDefault - {Boolean} If true, we stop the event chain but
*                               still allow the default browser
*                               behaviour (text selection, radio-button
*                               clicking, etc)
*                               Default false
*/

stop: function(event, allowDefault) {

        if (!allowDefault) { 
            if (event.preventDefault && event.cancelable) { // 新增event.cancelable判断
                event.preventDefault();
            } else if (!event.preventDefault) {
                event.returnValue = false;
            }
        }
                
        if (event.stopPropagation) {
            event.stopPropagation();
        } else {
            event.cancelBubble = true;
        }
    },

这段修改只是在原来的event.preventDefault判断后面加了&& event.cancelable,确保只有当事件可以取消默认行为时才调用preventDefault(),从根源避免报错。

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 09:35:01