在Aurachain中用自定义脚本实现下拉联动时遇indexOf报错求助
解决Aurachain下拉列表「Cannot read property of indexOf」错误及需求实现
错误原因拆解
- 所有API调用的参数都是空字符串
"":getCatalogValues需要传入真实的「城市与国家」目录名称,getValue要填对应字段的标识,setValues要指定下拉列表字段的标识,空参数会导致拿不到有效数据,row.country自然会是undefined,触发indexOf读取错误。 - 用了中文引号(
“”):JavaScript只识别英文引号(""/''),这会导致语法错误或者把变量当成字符串处理。 - 逻辑完全搞反:你要的是选城市后自动填国家,但原代码是试图根据国家筛选城市,而且
indexOf("otherField")把变量包成了字符串,根本没用到实际的字段值。
修正后的实现方案
1. 换对事件绑定
别在下拉列表的onInit里写代码,应该把逻辑绑到城市下拉列表的onChange事件上——选完城市才触发填充国家的操作。
2. 修正后的代码
// 替换成你的「城市与国家」目录名称 const cityCountryCatalog = this.getCatalogValues("城市与国家"); // 替换成你的城市下拉字段的ID/名称 const selectedCity = this.getValue("城市字段"); // 在目录里找到选中城市对应的条目,注意替换成你目录里的城市属性名(比如你的目录里可能叫cityName) const matchedData = cityCountryCatalog.find(row => row.city === selectedCity); // 替换成你的国家字段ID/名称,匹配到结果就填充 if (matchedData) { this.setValue("国家字段", matchedData.country); }
3. 关键修正点
- 所有空参数都换成实际的目录名、字段标识,确保能拿到有效数据。
- 把所有中文引号改成英文引号,避免语法报错。
- 调整逻辑为:选城市→找对应国家→填充字段,完全匹配你的需求。
额外提醒
- 确认「城市与国家」目录里的属性名,比如如果目录里城市叫
cityName、国家叫countryName,就要把代码里的row.city、matchedData.country换成对应的名字。 - 如果目录数据很多,可以提前把目录数据缓存起来,不用每次触发事件都重新拉取。
内容的提问来源于stack exchange,提问作者Mihaela Lupu
相关产品推荐
相关产品推荐

