I've got a question regard Chart.js.

我使用提供的文档绘制了多个图表.我想知道,如果点击其中一个图表的某个部分,我是否可以根据该部分的值进行ajax调用?

For example, if this is my data

var data = [
    {
        value: 300,
        color:"#F7464A",
        highlight: "#FF5A5E",
        label: "Red"
    },
    {
        value: 50,
        color: "#46BFBD",
        highlight: "#5AD3D1",
        label: "Green"
    },
    {
        value: 100,
        color: "#FDB45C",
        highlight: "#FFC870",
        label: "Yellow"
    }
], 

我是否可以点击标记为Red的切片并调用以下形式的URL: example.com?label=red&value=300?如果是,我该怎么做呢?

推荐答案

Update: As @Soham Shetty comments, getSegmentsAtEvent(event) only works for 1.x and for 2.x getElementsAtEvent should be used.

.getElementsAtEvent(e)

Looks for the element under the event point, then returns all elements at the same data index. This is used internally for 'label' mode highlighting.

在图表实例上调用getElementsAtEvent(event)传递一个

canvas.onclick = function(evt){
    var activePoints = myLineChart.getElementsAtEvent(evt);
    // => activePoints is an array of points on the canvas that are at the same position as the click event.
};

Example: https://jsfiddle.net/u1szh96g/208/


Original answer (valid for Chart.js 1.x version):

You can achieve this using getSegmentsAtEvent(event)

在图表实例上调用getSegmentsAtEvent(event)传递一个

From: Prototype Methods

So you can do:

$("#myChart").click( 
    function(evt){
        var activePoints = myNewChart.getSegmentsAtEvent(evt);           
        /* do something */
    }
);  

Here is a full working example:

<html>
    <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.2.js"></script>
        <script type="text/javascript" src="Chart.js"></script>
        <script type="text/javascript">
            var data = [
                {
                    value: 300,
                    color:"#F7464A",
                    highlight: "#FF5A5E",
                    label: "Red"
                },
                {
                    value: 50,
                    color: "#46BFBD",
                    highlight: "#5AD3D1",
                    label: "Green"
                },
                {
                    value: 100,
                    color: "#FDB45C",
                    highlight: "#FFC870",
                    label: "Yellow"
                }
            ];

            $(document).ready( 
                function () {
                    var ctx = document.getElementById("myChart").getContext("2d");
                    var myNewChart = new Chart(ctx).Pie(data);

                    $("#myChart").click( 
                        function(evt){
                            var activePoints = myNewChart.getSegmentsAtEvent(evt);
                            var url = "http://example.com/?label=" + activePoints[0].label + "&value=" + activePoints[0].value;
                            alert(url);
                        }
                    );                  
                }
            );
        </script>
    </head>
    <body>
        <canvas id="myChart" width="400" height="400"></canvas>
    </body>
</html>

Jquery相关问答推荐

在添加_renderMenu方法时,是什么原因导致jQuery UI AutoComplete抛出TypeError?

jQuery 或 JavaScript 中的$符号是什么意思?

JQuery通过类名获取所有元素

jquery如何捕获输入键并将事件更改为选项卡

如何使用 jQuery 将表格的一行滚动到视图 (element.scrollintoView) 中?

如何在jQuery中 Select 具有特定ID的所有元素?

如何使用 jQuery 或 JavaScript 模拟单击​​按钮的动作?

Angular.js 在多个元素中重复

将参数附加到 URL 而不刷新

Jquery,清除/清空 tbody 元素的所有内容?

如何在实际图像下载时显示加载图像

使用 jQuery Select 最后 5 个元素

移动 chrome 在滚动时触发调整大小事件

捕获在页面任意位置按下的 Enter 键

将多个 JavaScript 文件合并为一个 JS 文件

设置 JQuery event.preventDefault() 时绕过 window.open 上的弹出窗口阻止程序

如何在 JavaScript / jQuery 中获取对象的属性?

jQuery位置href

jQuery empty() 与 remove()

在页面加载之间保持变量