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

关于jQuery中Uncaught TypeError: accordion is not a function报错的咨询

解决“Uncaught TypeError: accordion is not a function”报错问题

嘿,我之前也踩过这个坑!这个报错的核心原因很明确:原生jQuery本身并没有accordion()方法,这个功能是jQuery UI组件库提供的——你只引入了jQuery 3.3.1,却没加载对应的jQuery UI,所以浏览器识别不了这个方法。下面是一步步的解决思路:

1. 必须引入jQuery UI库

首先要在jQuery之后加载jQuery UI的脚本和样式文件,顺序绝对不能乱。举个示例:

<!-- 先加载核心jQuery -->
<script src="jquery-3.3.1.min.js"></script>
<!-- 再加载jQuery UI脚本 -->
<script src="jquery-ui.min.js"></script>
<!-- 别忘了引入jQuery UI的样式文件,否则手风琴会没有默认样式 -->
<link rel="stylesheet" href="jquery-ui.min.css">

如果用CDN的话,建议选和jQuery 3.3.1兼容的UI版本(比如1.12.1,这个版本和jQuery 3.x系列兼容性很好)。

2. 确保代码在DOM加载完成后执行

调用accordion()的代码一定要等页面DOM加载完成后再执行,包裹在$(document).ready()里是最稳妥的方式,同时可以直接在这里配置顶部平滑滚动的逻辑:

$(document).ready(function() {
  // 初始化手风琴并配置平滑滚动
  $("#your-accordion-id").accordion({
    collapsible: true,
    animate: 300,
    // 面板切换时触发平滑滚动到当前面板顶部
    activate: function(event, ui) {
      $("html, body").animate({
        scrollTop: ui.newHeader.offset().top
      }, 500);
    }
  });
});

3. 排查命名冲突问题

如果你在代码里用了$.noConflict()来避免jQuery和其他库的冲突,那调用accordion()时要使用正确的变量,比如:

var $j = jQuery.noConflict();
$j(document).ready(function() {
  $j("#your-accordion-id").accordion();
});

4. 确认选择器和DOM元素存在

检查你的选择器是否正确(比如ID拼写错误、类名写错),可以先打印元素长度确认:

$(document).ready(function() {
  var $accordion = $("#your-accordion-id");
  console.log("找到的手风琴元素数量:", $accordion.length);
  if ($accordion.length > 0) {
    $accordion.accordion();
  } else {
    console.error("找不到目标手风琴元素,请检查选择器!");
  }
});

5. 版本兼容性验证

jQuery 3.3.1和jQuery UI 1.12.x是完全兼容的,尽量不要用过于老旧或最新的UI版本搭配,避免出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:59:51