【问题标题】:click event on morris bar莫里斯栏上的点击事件
【发布时间】:2016-07-29 15:18:39
【问题描述】:

我实现了 morris 图表,并且还在使用点击功能,但我希望当我点击栏时,该栏的数据会发出警报。所以如何获取数据。

 <!DOCTYPE html>
    <html>
    <head>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
      <script src="http://cdn.oesmith.co.uk/morris-0.4.1.min.js"></script>
    <meta charset=utf-8 />
    <title>Morris.js Bar Chart Example</title>
    </head>
    <body>
      <div id="bar-example"></div>
    </body>
        <script>
    Morris.Bar({
      element: 'bar-example',
      data: [
        { y: '2006', a: 100, b: 90 },
        { y: '2007', a: 75,  b: 65 },
        { y: '2008', a: 50,  b: 40 },
        { y: '2009', a: 75,  b: 65 },
        { y: '2010', a: 50,  b: 40 },
        { y: '2011', a: 75,  b: 65 },
        { y: '2012', a: 100, b: 90 }
      ],
      xkey: 'y',
      ykeys: ['a', 'b'],
      labels: ['Series A', 'Series B']
    });

    $( "#bar-example svg rect" ).on('click', function(data) {
      alert( data);//show [object.Object] when alert popup
    });
    </script>

    </html>

【问题讨论】:

    标签: javascript jquery morris.js


    【解决方案1】:

    首先,谢谢你让我发现this cool graph library。 ;)

    这是一次编辑
    经过几次尝试......
    我最终真正简化了我的解决方案。
    因此,为了清楚起见,我删除了所有以前的编辑。无论如何,您都可以在编辑历史记录中看到它们。 ;)。

    所以现在,基于下面 cmets 中的 new example provided

    我们在图表下方的摘要中获得了所需的信息:

    var thisDate,thisData;
    $( "#bar-example svg rect" ).on('click', function() {
        // Find data and date in the actual morris diply below the graph.
        thisDate = $(".morris-hover-row-label").html();
        thisDataHtml = $(".morris-hover-point").html().split(":");
        thisData = thisDataHtml[1].trim();
    
        // alert !!
        alert( "Data: "+thisData+"\nDate: "+thisDate );
    });
    

    thisDatethisData 不保存任何内容(空)。
    但它们在点击时保存最后点击的条形值。
    这些变量可用于其他后续脚本,因为在 click() 处理程序之外声明。

    this new CodePen

    【讨论】:

    • 好的...这有点复杂...会尝试找到一些东西。
    • 好吧,我等着@Louys Patrice
    • 您的答案是有效的,但是当图形调整大小时它返回无效信息..请参阅此链接 .jsbin.com/cenehediyi/edit?html,js,output
    • 好的,我明白了。在这种情况下,并非所有日期都显示。我将根据最后一个示例尝试其他方法。等等!
    • 我认为您应该从您现在所在的位置开始另一个 SO 问题。最初的问题是«当我点击一个栏来提醒它时如何获取数据?»我回答了这个问题。请接受这个答案......并重新提出一个关于轴标签和角度集成的明确问题。然后这个问题将出现在最新的并引起更多关注。 ;) 如果可以的话,我会回答这些额外的问题,但你需要更多的人参与此案。
    【解决方案2】:

    “rect”元素不在我的折线图中,因此我将其删除。非常感谢,它给了我所需要的东西。

        var thisDate,thisData;
        $( "#morrisLine svg" ).on('click', function() {
            // Find data and date in the actual morris diply below the graph.
            thisDate = $(".morris-hover-row-label").html();
            thisDataHtml = $(".morris-hover-point").html().split(":");
            thisData = thisDataHtml[1].trim();
    
            // alert !!
            alert( "Data: "+thisData+"\nDate: "+thisDate );
        });
    

    【讨论】:

      【解决方案3】:

      我对下面的javascript函数不是很自豪,但是为了检索我们刚刚点击的矩形的索引,我使用它成功了。 然后我调用一个 C# 方法来检索这些值。

      $('#m_Top10Applications svg rect').on('click', function (event) {  window.location.replace("MyPage.aspx?Top10Index=" + GetMorrisBarClickedBarIndex($this));});
      
      function GetMorrisBarClickedBarIndex(par$ThisRect)
      {
         var xRect = par$ThisRect[0].x.baseVal.value;
         var TheParent = par$ThisRect.parent();
         var Rectangles = TheParent.find("rect");
         var Rect0 = Rectangles[0];
         var Rect1 = Rectangles[1];
         var X0 = Rect0.x.baseVal.value;
         var X1 = Rect1.x.baseVal.value;
         var RectWidth = X1 - X0;
         var xPos = xRect - X0;
         var Index = Math.floor(xPos / RectWidth, 0);
         return Index;
      }
      

      【讨论】:

        【解决方案4】:

        以上示例是折线图,而不是具有多个不同颜色条形的条形图。

        如果您的莫里斯图表中有三个条形图,下面是我的代码,基于上述解决方案:

        $('#bar-sixmonthstats svg rect').on('click', function () {
            _$month = $('.morris-hover-row-label').text();
        
            //debugger;
            barColor = $(this).attr('fill');
            var barType = '';
        
            switch (barColor) {
                case '#64a900': barType = 'PO'; break;
                case '#7acc00': barType = 'SO'; break;
                case '#4d8000': barType = 'WO'; break;
            }
                                
            console.log("Order Type : " + barType + "\nDate : " + _$month);
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多