Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to invoke "click" event programmatically in d3?

I'm trying like that (also at https://gist.github.com/1703994):

<!DOCTYPE html>  <html>    <head>      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>      <script type="text/javascript" src="http://mbostock.github.com/d3/d3.js?1.27.2"></script>      <script type="text/javascript" src="http://mbostock.github.com/d3/d3.time.js?1.27.2"></script>        <script type="text/javascript" src="js-libs/jquery-1.7.js"></script>        <style>        <!--        #test {        width: 400px;        height: 500px;        }        -->      </style>    </head>      <body>        <script type="text/javascript">        $(function() {          var w = 600,              h = 350;            var vis = d3.select("#test").append("svg:svg")          .attr("width", w)          .attr("height", h)          .append("svg:g")          .attr("transform", "translate(" + w / 2 + "," + h / 2 + ")");            var g = vis.selectAll("g")          .data([ { x:1 , y: 2} ])          .enter().append("svg:g");            g.append("svg:path")          .attr("fill", "red")          .attr("stroke", "red")          .attr("stroke-width", "10")          .attr("d", "M 100 350 l 150 -300")            g.select("path")          .on("click", function() { console.log("Hello"); });            // XXX: how to execute click programmaticaly?        })      </script>        <div id="test"></div>    </body>  </html>

But doesn't work

I think we may use https://github.com/mbostock/d3/wiki/Internals#wiki-dispatch_on

But how to do it?

like image 476
mad Avatar asked Jan 30 '12 11:01

mad


1 Answers

not sure why, but there appears to be a discrepancy with the way jQuery and d3 handle events that causes a jQuery induced click event $("#some-d3-element").click() to not dispatch to the d3 element.

a workaround:

jQuery.fn.d3Click = function () {   this.each(function (i, e) {     var evt = new MouseEvent("click");     e.dispatchEvent(evt);   }); }; 

and then call it:

$("#some-d3-element").d3Click(); 
like image 188
handler Avatar answered Sep 21 '22 12:09

handler