2013-07-11 7 views
17

पर एक क्लिक घटना जोड़ने के लिए मैं nvd3.js का उपयोग कर रहा है और एक क्लिक करें घटनाकैसे nvd3.js ग्राफ

d3.selectAll(".nv-bar").on('click', function() {console.log("test");}); 

JSFiddle

मैं ऐसा कैसे कर सकते हैं जोड़ने की कोशिश कर?

+0

मेरे पिछले जवाब एक गलती है तो उसे हटाने के लिए किया था, कि नोटिस नहीं किया था, जैसे ही मैं एक जवाब मिल जाएगा, या कोई और इससे पहले एक उत्तर पोस्ट करेगा, इसके बारे में खेद है। – shabeer90

उत्तर

26

मैं एक ही मुद्दे पर चल रहा था और दस्तावेज की कमी के कारण सभी को एनवीडी 3 को डंप करने वाला था ... आपको क्या करना है, addGraph() में कॉलबैक फ़ंक्शन जोड़ना है। D3.selectAll() के बजाय d3.selectAll() को भी नोट करें।

गुड लक।

nv.addGraph(function() { 
    var chart = nv.models.multiBarHorizontalChart() 
     .x(function(d) { return d.label }) 
     .y(function(d) { return d.value }) 
     .margin({top: 5, right: 5, bottom: 5, left: 5}) 
     .showValues(false) 
     .tooltips(true) 
     .showControls(false); 

    chart.yAxis 
     .tickFormat(d3.format('d')); 

    d3.select('#social-graph svg') 
     .datum([data]) 
     .transition().duration(500) 
     .call(chart); 

     nv.utils.windowResize(chart.update); 

     return chart; 
    },function(){ 
      d3.selectAll(".nv-bar").on('click', 
       function(){ 
        console.log("test"); 
      }); 
     }); 
+0

धन्यवाद एलेक्स यह काम किया! – Petran

+3

दुर्भाग्य से मुझे इस दृष्टिकोण को एनवी 3 डी लाइन चार्ट पर लागू करने का कोई भाग्य नहीं था। मेरा लक्ष्य क्लिक किए गए लाइन पॉइंट (एक्स, वाई) का डेटा प्राप्त करना था, लेकिन d3.selectAll ("nv-point-paths") पर ('क्लिक') ने मुझे व्यक्तिगत बिंदु के बजाय पूरे चार्ट का डेटा दिया । मैं इसे d3.selectAll ("nv-point-paths path") के साथ ठीक करने की आशा करता हूं। ('क्लिक करें') पर, लेकिन यह हैंडलर कभी ट्रिगर नहीं हुआ। कोई उपाय? – fbuchinger

+0

असल में यदि आप परीक्षाओं पर नज़र डालते हैं, तो आप देखेंगे कि घटनाओं को संभालने का सबसे अच्छा तरीका वॉक्समैन ने सुझाव दिया है। स्टैक किए गए बार चार्ट पर –

2

यह मेरे लिए काम किया:

$(document).on("click", "#chart svg", function(e) { 
    console.log (e); 
    console.log (e.target.__data__); 
    }); 
38

बस पता चला कि यह रूप में अच्छी तरह से काम करता है ((। E.target डेटा डेटा विशेषताओं एक्स की तरह, उस तत्व से जुड़ी, वाई आउटपुट) कम से कम के लिए multibar चार्ट):

chart.multibar.dispatch.on("elementClick", function(e) { 
    console.log(e); 
}); 

मैं src/multibar.js पता लगाने के लिए में स्रोत को देखने के लिए था, चूंकि यह वहां है, मुझे लगता है कि यह वही तरीका है जिसका इरादा किया जाना था। हालांकि, मैंने जवाब दिया कि एलेक्स ने अपने जवाब में क्या कहा: एनवीडी 3 के लिए दस्तावेज़ीकरण की कमी वास्तव में एक बड़ा नुकसान है। कौन सा दुख की बात है बहुत अच्छा है क्योंकि परियोजना के सामान्य विचार: हमें सभी विवरण में जाने के बिना डी 3 की शक्ति दे रही है ...

+3

यह अच्छी तरह से काम करता है। आपको ऑब्जेक्ट को अपने चार्ट प्रकार से मिलान करना होगा: 'chart.pie',' chart.bars', 'chart.lines'। – iamsar

+0

यह बहुत उपयोगी है। धन्यवाद! – Nikhil

+3

बहुत निराशाजनक है कि सबसे हालिया रिलीज (1.8.1) अब ईवेंट या श्रृंखला की श्रृंखला, केवल बार (या सर्कल) लौटाता है, जो कि एक बड़ी दर्द बिंदु है यदि आप 'd3.event' को पकड़ने के लिए उपयोग कर रहे थे तत्व और शैली, उदाहरण के लिए बार के रंग को बदलें। Https://github.com/novus/nvd3/blob/v1.8.1/build/nv.d3.js#L4946 बनाम https://github.com/novus/nvd3/blob/v1.7.1/build/ देखें nv.d3.js # L3745 –

0
AngularJS का उपयोग कर
$('.nv-pie .nv-pie .nv-slice').click(function(){ 
    temp = $(this).text(); 
    alert(temp); 
}) 

यह पाई चार्ट के लिए ठीक काम करेगा, इसी तरह यू अन्य चार्ट भी के लिए आगे बढ़ो कर सकते हैं ....

1

, अपनेमें इस कोड का उपयोग।

$scope.$on('elementClick.directive', function(angularEvent, event){ 
    console.log(event); 
}); 
0

स्टैक्ड क्षेत्र चार्ट के लिए, आप interactiveGuideline अक्षम करें और elementClick.area उपयोग करना चाहिए:

chart.useInteractiveGuideline(false); 

chart.stacked.scatter.dispatch.on("elementClick.area", function(e) { 
    console.log(e); 
}); 
1

This coderwall blog सिर हमें सही दिशा।

chr.scatter.dispatch.on('elementClick', function(event) { console.log(event); });

4

यहां तीन मुख्य बिंदु हैं।

1) कोई दस्तावेज नहीं है कि आपको स्रोत कोड से गुजरना है।

2) सभी ग्राफों में टूलटिप होता है, जिसका अर्थ है कि ईवेंट पहले ही स्रोत कोड में फायरिंग कर रहे हैं।

3) स्रोत कोड के सड़क मानचित्र के रूप में कॉन्फ़िगरेशन ऑब्जेक्ट (दस्तावेज़ीकरण में) का उपयोग करें।

यानी।

var config = {chart: {type: 'multiChart',xAxis:{},yAxis{}} 

ओपन nvd3/nv.d3.js फ़ाइल

CTRL + F + चार्ट प्रकार। इस मामले में यह 'बहुआयामी' है।

आप nv.models.multiChart देखेंगे।

टूलटिप ईवेंट ढूंढने के लिए नीचे स्क्रॉल करें और आपको आवश्यक दस्तावेज़ मिलेंगे।

lines1.dispatch.on('elementMouseout.tooltip', function(evt) {tooltip.hidden(true) }); 
stack1.dispatch.on('elementMouseout.tooltip', function(evt) {tooltip.hidden(true) }); 
bars1.dispatch.on('elementMouseout.tooltip', function(evt) {tooltip.hidden(true) }); 

इसलिए, अपनी खुद की घटना लिखने के लिए ...

var config = {chart: {type: 'multiChart', 
       bars1: { 
       dispatch:{ 
        elementClick:function(e){//do Stuff} 
       }, 
       xAxis:{},yAxis{} 
       } 
संबंधित मुद्दे