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

调用jQuery的blur/focus触发TypeError:this.trigger不是函数

问题描述

页面中有多个配置方式相同的按钮,但调用focus()或blur()方法时,部分按钮会触发TypeError,该错误发生在jQuery 3.6.0内部。

报错位置的jQuery代码片段:

S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function (e, n) {
    S.fn[n] = function (e, t) {
        return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n)
    }
})

报错信息:

jquery-3.6.0.js?v=638024629878907069:3228 Uncaught TypeError: this.trigger is not a function
at S.fn.<computed> (jquery-3.6.0.js?v=638024629878907069:3228:73)

请问为何仅部分按钮或元素会持续出现该问题?


原因分析与解决方案

这个错误的核心是调用focus()/blur()的对象不是合法的jQuery实例,或者实例关联的DOM元素已失效,以下是具体场景和排查方向:

常见触发场景

  • 目标DOM已被销毁:部分按钮可能在调用方法前就被动态移除(比如通过remove()、detach()或页面更新),此时对应的jQuery对象虽然还存在,但内部绑定的DOM节点已不存在,调用方法时this指向的对象丢失了trigger方法。
  • 误将原生DOM当jQuery实例用:如果代码里直接拿原生DOM元素(比如document.getElementById('btn')返回的对象)调用jQuery的focus()方法,就会触发这个错误——原生元素的focus是原生API,但走jQuery的方法映射逻辑时,会因为对象不具备jQuery的trigger方法报错。
  • 异步时序问题:在AJAX回调、定时器这类异步逻辑里调用方法时,目标按钮可能已经被页面更新替换,原jQuery实例绑定的DOM已不存在。
  • 局部jQuery原型被篡改:极少数情况下,自定义代码或第三方脚本可能修改了局部jQuery实例的原型链,但这种情况通常会影响所有元素,而非部分。

排查与修复建议

  1. 调用方法前先校验jQuery实例的有效性:
    // 检查实例是否包含有效DOM元素,且元素仍在DOM树中
    if ($targetBtn.length > 0 && $targetBtn[0].isConnected) {
        $targetBtn.focus();
    }
    
  2. 确认调用对象是jQuery实例:
    console.log($targetBtn instanceof jQuery); // 正常应为true
    
  3. 梳理DOM操作逻辑,确保调用方法时目标元素未被移除或替换。

内容的提问来源于stack exchange,提问作者Kristóf Horváth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:31:07