为什么Google Apps Script项目中MaterializeCSS自动补全功能失效
问题排查与修复方案
你代码里存在4个核心错误导致自动补全失效,按优先级修复即可:
- 语法错误:
page-js.html中DOMContentLoaded事件监听代码缺闭合右括号,导致整段初始化逻辑根本没有执行 - 后端函数缺失:前端调用了
google.script.run.getWords(),但你的Code.gs中没有定义getWords函数,接口请求失败后不会触发回调函数populateWords - 数据未对接:
populateWords中目前用的是写死的测试数据,没有用到后端返回的表格内容 - 数据格式错误:你当前
doGet中把表格数据拼接成了<option>标签,这是下拉选择组件的格式,自动补全需要的是纯字符串数组
修正后的page-js.html代码
<script> document.addEventListener('DOMContentLoaded', function() { google.script.run.withSuccessHandler(populateWords).getWords(); }); // 补全了这里缺失的闭合右括号 function populateWords(words){ // 把后端返回的数组转成Materialize要求的对象格式 const autocompleteData = {}; words.forEach(item => autocompleteData[item] = null); const elems = document.querySelectorAll('.autocomplete'); const instances = M.Autocomplete.init(elems, { data: autocompleteData, minLength: 1 // 可选配置,输入1个字符就触发补全 }); } </script>
新增到Code.gs的代码
// 新增getWords函数给前端调用 function getWords() { const ss = SpreadsheetApp.openByUrl("你的表格URL"); // 替换成你自己的表格链接 const ws = ss.getSheetByName("Const_Sources"); const list = ws.getRange(1,1,ws.getRange("A1").getDataRegion().getLastRow(),1).getValues(); // 返回一维字符串数组 return list.map(r => r[0].toString().trim()); }
验证步骤
修复后先打开浏览器控制台排查有无报错,可先输入测试关键词看能不能触发补全,再确认表格内容是否正常加载。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

