javascript - 单击具有多个系列的 highcharts 上的事件

标签 javascript jquery highcharts

当我的图表上有多个具有交叉点的系列时,点击事件似乎根本不会触发。这是一个例子:

http://jsfiddle.net/agnHV/22/

如果您查看所有 3 个系列相交的 April 并尝试单击该点,它不会发出警报,但如果您检查任何不相交的点,它们会正确发出警报。

$(function () {
        $('#container').highcharts({
            chart: {
                zoomType: 'xy'
            },
            title: {
                text: 'Average Monthly Weather Data for Tokyo'
            },
            subtitle: {
                text: 'Source: WorldClimate.com'
            },
            xAxis: [{
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            }],
            yAxis: [{ // Primary yAxis
                labels: {
                    formatter: function() {
                        return this.value +'°C';
                    },
                    style: {
                        color: '#89A54E'
                    }
                },
                title: {
                    text: 'Temperature',
                    style: {
                        color: '#89A54E'
                    }
                },
                opposite: true
    
            }, { // Secondary yAxis
                gridLineWidth: 0,
                title: {
                    text: 'Rainfall',
                    style: {
                        color: '#4572A7'
                    }
                },
                labels: {
                    formatter: function() {
                        return this.value +' mm';
                    },
                    style: {
                        color: '#4572A7'
                    }
                }
    
            }, { // Tertiary yAxis
                gridLineWidth: 0,
                title: {
                    text: 'Sea-Level Pressure',
                    style: {
                        color: '#AA4643'
                    }
                },
                labels: {
                    formatter: function() {
                        return this.value +' mb';
                    },
                    style: {
                        color: '#AA4643'
                    }
                },
                opposite: true
            }],
            tooltip: {
                shared: true
            },
            legend: {
                layout: 'vertical',
                align: 'left',
                x: 120,
                verticalAlign: 'top',
                y: 80,
                floating: true,
                backgroundColor: '#FFFFFF'
            },
            plotOptions:{
                column:{
                    point:{
                        events:{
                            click:function(){
                            alert('aaa');
                            }
                        }
                    }
                }
            },
            series: [{
                name: 'Rainfall',
                color: '#4572A7',
                type: 'column',
                yAxis: 1,
                data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
                tooltip: {
                    valueSuffix: ' mm'
                }
    
            }, {
                name: 'Sea-Level Pressure',
                type: 'spline',
                color: '#AA4643',
                yAxis: 2,
                data: [1016, 1016, 1015.9, 1015.5, 1012.3, 1009.5, 1009.6, 1010.2, 1013.1, 1016.9, 1018.2, 1016.7],
                marker: {
                    enabled: false
                },
                dashStyle: 'shortdot',
                tooltip: {
                    valueSuffix: ' mb'
                }
    
            }, {
                name: 'Temperature',
                color: '#89A54E',
                type: 'spline',
                data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
                tooltip: {
                    valueSuffix: ' °C'
                },
                index: 1,
                zIndex: 99,
                events: {
                	click: function(e) {
                  	alert('boom');
                  	console.log("CLICKY");
                  }
                }
            }]
        });
    });
    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>

<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>

我试过添加 index/zIndex 来优先处理某些点,但似乎没有帮助。

最佳答案

为您想出了一个不错的解决方案。因为单独的线事件不可靠,所以我为图表上被单击的任何点创建了一个事件,然后使用事件信息提取系列的名称并运行检查以查看它是否是我想要的。

这是我添加的 Javascript:http://jsfiddle.net/agnHV/24/

plotOptions: {
    series: {
      point: {
        events: {
        click: function(e){
          var seriesName = e.point.series.name;
          if(seriesName == "Temperature") {
            console.log("Clicked Temperature Line");
          }
          else if(seriesName == "Sea-Level Pressure") {
            console.log("Clicked Sea-Level Line");
          }
          else if(seriesName == "Rainfall") {
            console.log("Clicked Rainfall Bar");
          }
        }
      }
    }
  }
}

$(function () {
        $('#container').highcharts({
            chart: {
                zoomType: 'xy'
            },
            title: {
                text: 'Average Monthly Weather Data for Tokyo'
            },
            subtitle: {
                text: 'Source: WorldClimate.com'
            },
            xAxis: [{
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            }],
            yAxis: [{ // Primary yAxis
                labels: {
                    formatter: function() {
                        return this.value +'°C';
                    },
                    style: {
                        color: '#89A54E'
                    }
                },
                title: {
                    text: 'Temperature',
                    style: {
                        color: '#89A54E'
                    }
                },
                opposite: true
    
            }, { // Secondary yAxis
                gridLineWidth: 0,
                title: {
                    text: 'Rainfall',
                    style: {
                        color: '#4572A7'
                    }
                },
                labels: {
                    formatter: function() {
                        return this.value +' mm';
                    },
                    style: {
                        color: '#4572A7'
                    }
                }
    
            }, { // Tertiary yAxis
                gridLineWidth: 0,
                title: {
                    text: 'Sea-Level Pressure',
                    style: {
                        color: '#AA4643'
                    }
                },
                labels: {
                    formatter: function() {
                        return this.value +' mb';
                    },
                    style: {
                        color: '#AA4643'
                    }
                },
                opposite: true
            }],
            tooltip: {
                shared: true
            },
            legend: {
                layout: 'vertical',
                align: 'left',
                x: 120,
                verticalAlign: 'top',
                y: 80,
                floating: true,
                backgroundColor: '#FFFFFF'
            },
            series: [{
                name: 'Rainfall',
                color: '#4572A7',
                type: 'column',
                yAxis: 1,
                data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
                tooltip: {
                    valueSuffix: ' mm'
                }    
            }, {
                name: 'Sea-Level Pressure',
                type: 'spline',
                color: '#AA4643',
                yAxis: 2,
                data: [1016, 1016, 1015.9, 1015.5, 1012.3, 1009.5, 1009.6, 1010.2, 1013.1, 1016.9, 1018.2, 1016.7],
                marker: {
                    enabled: false
                },
                dashStyle: 'shortdot',
                tooltip: {
                    valueSuffix: ' mb'
                }                    
            }, {
                name: 'Temperature',
                color: '#89A54E',
                type: 'spline',
                data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
                tooltip: {
                    valueSuffix: ' °C'
                }
                /*events: {
                	click: function(e) {
                  	alert('boom');
                  	console.log("CLICKY");
                  }
                }*/
            }],
            plotOptions: {
            	series: {
              	  point: {
                	events: {
                  	click: function(e){
                      var seriesName = e.point.series.name;
                      if(seriesName == "Temperature") {
                      	console.log("Clicked Temperature Line");
                      }
                      else if(seriesName == "Sea-Level Pressure") {
                      	console.log("Clicked Sea-Level Line");
                      }
                      else if(seriesName == "Rainfall") {
                      	console.log("Clicked Rainfall Bar");
                      }
                    }
                  }
                }
              }
            }          
        });
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>

<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>

关于javascript - 单击具有多个系列的 highcharts 上的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39152259/

相关文章:

javascript - 为什么这个 javascript 程序返回为未定义?

javascript - 如果声明是一个短语而不是一个特定的标题?

javascript - Jquery - Carasol 构建完成并希望获得有关最佳实践/整理我的代码的建议

javascript - 停止 Highcharts Networkgraph 在悬停时重新绘制标记

css - Highmaps Logo 字符串呈现无效的版权字符

javascript - HTML/Javascript - 单击时无法更改文本

javascript - 如何使用 PHP JSON ARRAY 根据另一个选择框填充选择框

jQuery src 在 IMG 上添加了奇怪的类

javascript - 如何使用 ASP.NET WebForms 在 Bootstrap 中正确插入来自 jQuery、javascript 和 CSS 的引用

javascript - 当类别的所有条形值等于 0 时,Highcharts 条形图删除类别