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

升级jQuery至3.6.1+版本后load函数触发indexOf未定义错误

jQuery 3.6.1+ 中使用load函数报错:Cannot read properties of undefined (reading 'indexOf')

你的代码存在两个关键问题,导致升级到jQuery 3.6.1及以上版本时触发错误:

  • 选择器范围错误:你绑定点击事件的选择器是$('.nav, #menu'),其中.nav对应HTML里的<ul class="nav nav-small flex-column">元素。这个<ul>标签没有href属性,点击它时$(this).attr('href')会返回undefined。jQuery 3.6.1+版本的load()函数对URL参数的校验更严格,尝试读取undefined的indexOf方法时就会抛出你看到的错误,而3.6.0版本对这种情况有容错处理,所以未报错。
  • 重复ID问题:HTML中出现了两个<a id="menu">,ID在文档中必须唯一,这属于无效的HTML结构,可能引发选择器匹配异常。

解决方案

方案1:修正选择器,仅绑定有效链接元素

把选择器改成只针对有href属性的目标链接,同时修复重复ID的问题:

$(document).ready(function() {
  // 绑定到子菜单里的所有.nav-link,或用修正后的class选择器
  $('#submenu-3 .nav-link').click(function(e) {
    e.preventDefault();
    $('#content').load($(this).attr('href'));
  });
});

修改HTML中的重复ID为class:

<li class="nav-item">
  <a class="nav-link menu" href="practise.php">Practice</a>
</li>
<li class="nav-item">
  <a class="nav-link menu" href="statistics.php">Statistics</a>
</li>

如果用class选择器,JS里可以改成$('.menu')。

方案2:添加参数校验,避免传入undefined

如果需要保留原选择器范围,在调用load()前先检查href是否有效:

$(document).ready(function() {
  $('.nav, .menu').click(function(e) {
    e.preventDefault();
    const href = $(this).attr('href');
    // 排除href为空或#的无效情况
    if (href && href !== '#') {
      $('#content').load(href);
    }
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:24:54