使用setExtremes时动态图表名称不识别的问题排查
问题原因及解决方案
问题出在哪?
你写的 'chart' + idconvertedtostr.yAxis[0].setExtremes(min, max); 有两个核心问题:
- 运算符优先级错误:JavaScript 中
.的优先级远高于+,代码会先执行idconvertedtostr.yAxis——但idconvertedtostr是字符串,根本没有yAxis属性,直接抛出"属性未定义"的错误。 - 字符串无法直接作为对象访问:就算你加括号改成
('chart' + idconvertedtostr).yAxis[0].setExtremes(...),此时'chart' + idconvertedtostr只是字符串"chart1",不是你定义的chart1对象,自然找不到yAxis属性。
两种解决方法
方法1:通过全局对象(window)访问(适用于chart是全局变量的情况)
全局声明的chart1、chart2这类变量会挂载到window对象上,你可以通过字符串键名来获取对应的对象:
ID = parseInt(elem.getAttribute('id')) const targetChart = window['chart' + ID]; // 直接用ID拼接,不用转字符串也可以 targetChart.yAxis[0].setExtremes(min, max);
方法2:用集合统一管理图表对象(推荐)
把所有图表对象放到一个对象或数组里,避免依赖全局变量,代码更健壮:
// 初始化图表时统一存入集合 const charts = { chart1: Highcharts.chart('chart1-container', {/* 配置项 */}), chart2: Highcharts.chart('chart2-container', {/* 配置项 */}), chart3: Highcharts.chart('chart3-container', {/* 配置项 */}) }; // 动态获取并调用方法 ID = parseInt(elem.getAttribute('id')); const targetChart = charts['chart' + ID]; if (targetChart) { // 加个判断避免找不到图表时报错 targetChart.yAxis[0].setExtremes(min, max); }
如果你的ID是从1开始的连续数字,用数组更简洁:
const charts = [ null, // 索引0占位,让索引1对应chart1 Highcharts.chart('chart1-container', {/* 配置项 */}), Highcharts.chart('chart2-container', {/* 配置项 */}) ]; ID = parseInt(elem.getAttribute('id')); charts[ID].yAxis[0].setExtremes(min, max);
内容的提问来源于stack exchange,提问作者Sarahrb
相关产品推荐
相关产品推荐

