添加图片后吉他和弦搜索栏失效及ReferenceError问题求助
吉他和弦搜索网站问题排查与修复方案
1. 解决 Uncaught ReferenceError: Cannot access 'isVisible' before initialization 错误
这个错误是ES6变量声明规则导致的:用let/const声明的变量存在暂时性死区,必须先完成声明才能访问。
- 打开
script.js,找到所有用到isVisible的代码位置,把变量声明语句(let isVisible或const isVisible)移到第一次使用该变量的代码之前。 - 错误示例:
修正后:// 错误:先调用变量再声明 updateVisibility(isVisible); let isVisible = false;// 正确:先声明再调用 let isVisible = false; updateVisibility(isVisible); - 如果
isVisible是在if、for这类块级作用域内声明的,不要在作用域外部提前引用它。
2. 修复搜索过滤失效问题
添加图片后过滤功能失效,大概率是和弦对象的结构发生变化,导致原有过滤逻辑无法正确读取root或key字段。
第一步:检查db.json的结构变化
对比添加图片前后的和弦对象,确保仅新增image字段,未修改原有root/key字段:
- 添加图片前的结构(参考):
{ "chords": [ {"root": "C", "key": "Major"} ] } - 添加图片后的正确结构:
{ "chords": [ {"root": "C", "key": "Major", "image": "./images/c-major.png"} ] }
如果不小心修改了root/key的字段名称,改回原名称即可。
第二步:核对过滤逻辑的字段匹配
检查script.js中的过滤函数,确保使用的字段名与db.json完全一致:
// 正确示例:匹配db中的root和key字段 const filteredChords = chords.filter(chord => { return (chord.root === selectedRoot || selectedRoot === 'all') && (chord.key === selectedKey || selectedKey === 'all'); });
如果之前误将chord.root写成chord.rootNote这类错误名称,修正为正确字段名即可。
第三步:调试数据获取过程
在获取和弦数据的代码中添加console.log,查看返回的数据结构是否正确:
fetch('http://localhost:3000/chords') .then(res => res.json()) .then(chords => { console.log当前和弦数据:', chords); // 打开浏览器控制台查看输出 // 后续渲染、过滤代码 });
如果控制台输出的chords数组中没有root或key字段,说明db.json的数据结构有误,需要修正。
3. 额外检查点
- 确认
npm start正常启动json-server,在浏览器中打开http://localhost:3000/chords,查看返回的JSON数据是否包含root、key、image字段。 - 渲染和弦的代码中,不要覆盖或修改
root/key的原始值,示例如下:chords.forEach(chord => { const chordCard = document.createElement('div'); chordCard.innerHTML = ` <h3>${chord.root} ${chord.key}</h3> <img src="${chord.image}" alt="${chord.root} ${chord.key} 和弦指法图"> `; document.getElementById('chords-container').appendChild(chordCard); });
内容的提问来源于stack exchange,提问作者Jode
相关产品推荐
相关产品推荐

