[解決済み] Chart.jsの円グラフのクリックイベント
質問
Chart.jsについて質問です。
私は提供されたドキュメントを使用して複数の円グラフを描きました。私は、チャートの1つの特定のスライスをクリックすると、そのスライスの値に応じてajaxコールを行うことができるのでしょうか?
例えば、これが私の
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
? もしそうなら、どうすればいいのでしょうか?
どのように解決するのですか?
更新しました。
Soham Shettyのコメント通りです。
getSegmentsAtEvent(event)
は 1.x でのみ動作し、2.x では
getElementsAtEvent
を使用する必要があります。
.getElementsAtEvent(e)
イベントポイントの下にある要素を探し、次に同じデータインデックスのすべての要素 を返します。これは内部的に'label'モードのハイライトに使用されます。 ハイライトのために内部的に使用されます。
呼び出し
getElementsAtEvent(event)
をChartインスタンスに渡して呼び出すと を呼び出すと、そのイベントの同じ位置にあるポイント要素 を返します。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. };
例 https://jsfiddle.net/u1szh96g/208/
オリジナルの回答です(Chart.js 1.xバージョンで有効)。
を使って実現できます。
getSegmentsAtEvent(event)
呼び出し
getSegmentsAtEvent(event)
を Chart インスタンスに渡すと を呼び出すと、そのイベントの同じ位置にあるセグメントを返します。 要素を返します。
からです。 プロトタイプメソッド
というわけで、できます。
$("#myChart").click(
function(evt){
var activePoints = myNewChart.getSegmentsAtEvent(evt);
/* do something */
}
);
以下は完全な動作例です。
<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>
関連
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] テキストボックスのEnterキーで、JavaScriptでボタンクリックをトリガーする
-
[解決済み] jQuery 複数のイベントで同じ関数を起動する
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。