为何Establishment对象含classes数组属性,控制台仍报classes未定义?
解决
classes未定义错误,实现班级关联机构的CRUD操作 你的代码出现classes未定义报错,且无法正确将班级存入对应机构的classes数组,核心问题是事件嵌套绑定导致作用域混乱、修改班级时错误引用未定义的全局classes变量,以下是具体修复方案:
核心修复点
- 不要将
#saveClasseBtn的点击事件嵌套在#saveEstablishmentBtn的事件内,避免重复绑定和作用域丢失 - 在打开班级模态框时,记录当前要操作的机构索引,确保班级能关联到正确的机构
- 修改班级时,操作对应机构的
classes数组,而非未定义的全局classes变量
修复后的完整代码
// 全局存储当前操作的机构索引(也可用模态框的data属性存储) let currentEstablishmentIndex = -1; // 保存机构事件 $('#saveEstablishmentBtn').click(function() { let establishment = { name: $('#establishmentName').val(), neighborhood: $('#establishmentNeighborhood').val(), date: $('#establishmentDate').val(), classes: [] }; if ($(this).text() === 'Enregistrer') { addEstablishment(establishment); } else { var index = $(this).data('index'); establishments[index] = establishment; } updateTable(); $('#establishmentModal').modal('hide'); console.log(establishment); console.log(establishments); }); // 打开班级模态框时,记录当前机构索引(需在按钮上设置data-establishment-index属性) $('#addClasseBtn').click(function() { currentEstablishmentIndex = $(this).data('establishment-index'); $('#classeModal').modal('show'); }); // 保存班级事件(独立绑定,不嵌套) $('#saveClasseBtn').click(function() { var classe = { nameClasse: $('#classeName').val(), filiere: $('#classeFiliere').val(), profTitulaire: $('#classeProfTitulaire').val() }; // 校验当前机构是否存在 if (currentEstablishmentIndex === -1 || !establishments[currentEstablishmentIndex]) { alert('请先选择要关联的机构'); return; } let targetEstablishment = establishments[currentEstablishmentIndex]; // 兼容机构未初始化classes数组的情况 if (!targetEstablishment.classes) { targetEstablishment.classes = []; } if ($(this).text() === 'Enregistrer') { targetEstablishment.classes.push(classe); } else { // 修改班级时,获取预先存储的班级索引 var classeIndex = $(this).data('classe-index'); targetEstablishment.classes[classeIndex] = classe; } updateClasseTable(); $('#classeModal').modal('hide'); console.log(classe); console.log(targetEstablishment.classes); });
额外说明
- 需在打开班级模态框的按钮上添加
data-establishment-index属性,传递当前要关联的机构索引 - 如果是修改班级,需在打开修改班级模态框时,记录当前班级的索引并设置到
#saveClasseBtn的data-classe-index属性上
内容的提问来源于stack exchange,提问作者Marvin Tony
相关产品推荐
相关产品推荐

