Google Script级联菜单选择房间后无法展示对应负责人问题求助
问题排查
直接列出所有可复现的错误点:
- 前端
updatedQtyOnHand函数存在变量声明错误:
你重复声明了zone变量,将房间下拉的值错误赋值给了zone,且未声明salle变量,导致调用服务端getQtyOnHand时传的salle参数为undefined,服务端始终无法匹配到房间维度的负责人数据。 - 四级下拉联动逻辑缺失:
房间(item-salle)下拉没有绑定change事件回调,用户手动选择房间后不会触发负责人更新逻辑。 - 边缘情况未处理:
服务端无匹配数据时返回数值0,前端直接调用split方法会抛出类型错误,导致负责人渲染失败。
修正代码
1. 修正后的前端updatedQtyOnHand函数
function updatedQtyOnHand(){ var site = document.getElementById("item-site").value; var secteur = document.getElementById("item-secteur").value; var zone = document.getElementById("item-zone").value; var salle = document.getElementById("item-salle").value; google.script.run.withSuccessHandler(afterQtyOnHandReturned).getQtyOnHand(site,secteur,zone,salle); }
2. 补充房间下拉的change事件绑定
在页面初始化逻辑(比如afterDropDownArrayReturned执行末尾)添加如下代码:
// 绑定房间下拉变更事件,选择房间后自动更新负责人 document.getElementById("item-salle").addEventListener("change", updatedQtyOnHand);
3. 优化前端返回处理逻辑,避免空值报错
function afterQtyOnHandReturned(qty){ document.getElementById("on-hand").textContent = ""; if(!qty.filtreSecteur || qty.filtreSecteur === 0) { document.getElementById("on-hand").textContent = "未匹配到负责人"; return; } var responsable = qty.filtreSecteur.toString().split("@"); var nomPrenomResp = responsable[0]; var adresseResponsable = nomPrenomResp+"@test.com"; document.getElementById("on-hand").textContent = adresseResponsable; }
4. 可选优化:服务端逻辑兼容空值
function getQtyOnHand(site, secteur, zone, salle){ const ss = SpreadsheetApp.getActiveSpreadsheet(); const ws = ss.getSheetByName("Table"); const data = ws.getRange(2, 1, ws.getLastRow()-1, 7).getValues(); const filteredData = data.filter(r => r[0] === site && r[1] === secteur && r[2] === zone && r[4] === salle); return { filtreSecteur: filteredData.length === 0 ? "" : filteredData.reduce((subtotal, r) => subtotal + r[6],"") }; }
内容的提问来源于stack exchange,提问作者Damien
相关产品推荐
相关产品推荐

