已修复:Wordpress 站点未捕获类型错误:jQuery(...).live 不是导致带有 JS 的图像不显示的函数

Posted

技术标签:

【中文标题】已修复:Wordpress 站点未捕获类型错误:jQuery(...).live 不是导致带有 JS 的图像不显示的函数【英文标题】:FIXED: Wordpress site Uncaught TypeError: jQuery(...).live is not a function causing images with JS to not show 【发布时间】:2020-12-08 09:29:12 【问题描述】:

我正在构建一个 WordPress 网站,但突然收到错误消息:

Uncaught TypeError: jQuery(...).live is not a function
    at htmlDocument.<anonymous> (main.js?ver=1.1:214)
    at i (jquery.js?ver=1.12.4-wp:2)
    at Object.fireWith [as resolveWith] (jquery.js?ver=1.12.4-wp:2)
    at Function.ready (jquery.js?ver=1.12.4-wp:2)
    at HTMLDocument.J (jquery.js?ver=1.12.4-wp:2)

我不确定如何复制此错误,因为它是突然发生的。

当我访问我的网站时,没有加载带有 JS 的图像

我检查了我的插件,当我在 Elementor 中查看所有图像的网站时,似乎没有看到任何新添加的内容,关于如何解决这个问题的任何想法?这个网站没有一个是纯 WordPress 的原始编码

谁能检查元素并告诉我是否/是什么插件导致了我的问题?

【问题讨论】:

Wordpress 5.5 停止使用 jquery migrate。它一直在导致旧插件和主题出现问题。这可能会解决它:wordpress.org/plugins/enable-jquery-migrate-helper @Cully 谢谢,最近一天左右发生了这种变化吗? @Cully 谢谢你的帮助!您是否可以发布作为答案,以便我可以选择以防社区中的其他人遇到同样的问题,请:) 我发布了更详细的答案。 【参考方案1】:

Wordpress 5.5 stopped using jQuery migrate。此更改已导致旧插件和主题出现问题。如果您在升级到 Wordpress 5.5 后发现问题,安装此插件可能会解决它:https://wordpress.org/plugins/enable-jquery-migrate-helper/

不过,最终更好的解决方案是将您当前的插件和主题升级到不依赖 jQuery 迁移的版本。或者,如果这不可能,请尝试从那些插件移到不需要 jQuery 迁移的插件。如果不这样做,您将来可能会遇到兼容性问题,或者更糟糕的是,这些过时的插件/主题会出现安全漏洞。

更新日期:2020 年 9 月 18 日

我查看了 Enable jQuery Migrate Helper 插件的源代码,它具有运行条件:

if ( version_compare( $GLOBALS['wp_version'], '5.6-alpha', '<' ) && ! class_exists( 'jQuery_Migrate_Helper' ) ) 
    include_once __DIR__ . '/class-jquery-migrate-helper.php';
    add_action( 'plugins_loaded', array( 'jQuery_Migrate_Helper', 'init_actions' ) );

因此,该插件仅适用于(包括)Wordpress 5.5。一旦 Wordpress 达到 5.6-alpha 版本,它将停止工作。

更新日期:2021 年 2 月 15 日

插件代码已更新,可以在 Wordpress 5.6 之后使用。但是,在 5.6 版及之后的版本中,它将包含 jquery-migrate-3.3.2 而不是 jquery-migrate-1.4.1,并且它包含的文件要少得多(主要是 jquery-ui 脚本)。如果您想继续使用旧版本的 jquery,有几个选项。

选项 A. 您可以将 jquery migrate 插件复制到一个新文件夹(基本上将其设为您自己的插件),重命名它,编辑 class-jquery-migrate-helper.php 文件,在 @987654328 中找到这一行@函数:

if ( version_compare( $GLOBALS['wp_version'], '5.6-alpha', '<' ) || 'yes' === get_option( '_jquery_migrate_downgrade_version', 'no' ) ) 

并将其替换为:

if(true) 

这将导致插件始终安装旧版本的 jquery。

选项 B. 通过执行以下操作创建一个仅包含旧 jquery 文件的新插件:

    创建一个新插件。 将 jquery migrate 插件中的所有 enable-jquery-migrate-helper/js 文件复制到新插件中的 js/ 文件夹中。 将此代码添加到您的插件文件中:
add_action('wp_default_scripts', function ($scripts) 
    $setScripts = function($scripts, $handle, $src, $deps = [], $ver = false, $in_footer = false) 
        $script = $scripts->query( $handle, 'registered' );

        if ( $script ) 
            // If already added
            $script->src  = $src;
            $script->deps = $deps;
            $script->ver  = $ver;
            $script->args = $in_footer;

            unset( $script->extra['group'] );

            if ( $in_footer ) 
                $script->add_data( 'group', 1 );
            
         else 
            // Add the script
            if ( $in_footer ) 
                $scripts->add( $handle, $src, $deps, $ver, 1 );
             else 
                $scripts->add( $handle, $src, $deps, $ver );
            
        
    ;

    $assets_url = $assets_url = plugins_url( 'js/', __FILE__  );

    $setScripts( $scripts, 'jquery-migrate', $assets_url . 'jquery-migrate/jquery-migrate-1.4.1-wp.js', array(), '1.4.1-wp' );
    $setScripts( $scripts, 'jquery-core', $assets_url . 'jquery/jquery-1.12.4-wp.js', array(), '1.12.4-wp' );
    $setScripts( $scripts, 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4-wp' );
    $setScripts( $scripts, 'jquery-ui-core', $assets_url . 'jquery-ui/core.min.js', array( 'jquery' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-core', $assets_url . 'jquery-ui/effect.min.js', array( 'jquery' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-blind', $assets_url . 'jquery-ui/effect-blind.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-bounce', $assets_url . 'jquery-ui/effect-bounce.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-clip', $assets_url . 'jquery-ui/effect-clip.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-drop', $assets_url . 'jquery-ui/effect-drop.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-explode', $assets_url . 'jquery-ui/effect-explode.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-fade', $assets_url . 'jquery-ui/effect-fade.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-fold', $assets_url . 'jquery-ui/effect-fold.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-highlight', $assets_url . 'jquery-ui/effect-highlight.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-puff', $assets_url . 'jquery-ui/effect-puff.min.js', array( 'jquery-effects-core', 'jquery-effects-scale' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-pulsate', $assets_url . 'jquery-ui/effect-pulsate.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-scale', $assets_url . 'jquery-ui/effect-scale.min.js', array( 'jquery-effects-core', 'jquery-effects-size' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-shake', $assets_url . 'jquery-ui/effect-shake.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-size', $assets_url . 'jquery-ui/effect-size.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-slide', $assets_url . 'jquery-ui/effect-slide.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-transfer', $assets_url . 'jquery-ui/effect-transfer.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-accordion', $assets_url . 'jquery-ui/accordion.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-autocomplete', $assets_url . 'jquery-ui/autocomplete.min.js', array( 'jquery-ui-menu', 'wp-a11y' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-button', $assets_url . 'jquery-ui/button.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-datepicker', $assets_url . 'jquery-ui/datepicker.min.js', array( 'jquery-ui-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-dialog', $assets_url . 'jquery-ui/dialog.min.js', array( 'jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button', 'jquery-ui-position' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-draggable', $assets_url . 'jquery-ui/draggable.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-droppable', $assets_url . 'jquery-ui/droppable.min.js', array( 'jquery-ui-draggable' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-menu', $assets_url . 'jquery-ui/menu.min.js', array( 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-position' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-mouse', $assets_url . 'jquery-ui/mouse.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-position', $assets_url . 'jquery-ui/position.min.js', array( 'jquery' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-progressbar', $assets_url . 'jquery-ui/progressbar.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-resizable', $assets_url . 'jquery-ui/resizable.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-selectable', $assets_url . 'jquery-ui/selectable.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-selectmenu', $assets_url . 'jquery-ui/selectmenu.min.js', array( 'jquery-ui-menu' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-slider', $assets_url . 'jquery-ui/slider.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-sortable', $assets_url . 'jquery-ui/sortable.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-spinner', $assets_url . 'jquery-ui/spinner.min.js', array( 'jquery-ui-button' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-tabs', $assets_url . 'jquery-ui/tabs.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-tooltip', $assets_url . 'jquery-ui/tooltip.min.js', array( 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-position' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-widget', $assets_url . 'jquery-ui/widget.min.js', array( 'jquery' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-touch-punch', false, array( 'jquery-ui-widget', 'jquery-ui-mouse' ), '0.2.2', 1 );
, -10);

【讨论】:

谢谢朋友,感谢您的帮助 该功能在儿童主题中对我不起作用。我必须在页脚中添加脚本本身: "你可以将 jquery migrate 插件复制到一个新文件夹中"你是怎么做到的? @CodyBugstein 将 jquery migrate 插件的内容复制到具有不同名称的新文件夹中。它本质上就像用相同的代码创建一个新插件,除了我描述的一个变化。 你如何将它复制到一个新文件夹,这就是我要问的【参考方案2】:

Wordpress 5.5 停止使用 jquery migrate。它一直在导致旧插件和主题出现问题。这是修复:https://wordpress.org/plugins/enable-jquery-migrate-helper/

【讨论】:

这不是解决方案 @CodyBugstein 这是 Cully 上面进一步阐述的临时修复 它暂时解决了我的问题。确认用于 Wordpress 5.7。 Avada 主题:导致在 Fusion Builder 中切换选项卡时出现问题 它更像是一个闪存修复程序,因此您可以保持您的网站运行,直到提供永久解决方案(主题开发人员更新以支持)。

以上是关于已修复:Wordpress 站点未捕获类型错误:jQuery(...).live 不是导致带有 JS 的图像不显示的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何修复此错误:未捕获(承诺)类型错误:无法读取未定义的属性(读取“长度”)

如何修复未捕获的类型错误:无法读取 null 的属性“值”

Wordpress 多站点错误

如何修复 WooCommerce 中的“未捕获的错误:在 null 上调用成员函数 get_tax_class()”?

未捕获的 ReferenceError:未定义 jQuery

谷歌地图未捕获的类型错误:无法读取 null 的属性“offsetWidth”