2016-06-21 10 views
0

私はパイ/ドーナツチャートを生成するためのシンプルなjavascript関数を書いています。市場で入手可能なチャートライブラリは使用できません。私は伝説のクリックイベントを書くことに打たれました。 私は伝説の値に基づいて、クリック機能にはjavascriptオブジェクトjavascriptオブジェクトで渡された関数にアクセスするには?

{ 
chartType:"donut", 
legend: { 
      click: function() { "legendText" // create another chart based on this value. } 
      } 
} 

としてチャートのパラメータを渡しています、ユーザーは、私が使用するユーザーを依頼する予定です(別のドーナツグラフを生成するための第2のjavascriptオブジェクトのオブジェクトを書き込みます。 legendText、クリック時に凡例のテキストが表示されます)。 私legendclickイベントで、このユーザー機能を組み込む方法を主なトラブルこの選択した伝説のコード

behind(legenditem.addeventlistener("click",function(){})). 
+4

JSONは、通常はこれらの事、そのデータ交換を格納するために使用されていません。しかし、関数を文字列化してFunctionコンストラクタを使用して起動することはできますが、そのような関数を誰かが追加できるようになると攻撃の可能性があります。 – somethinghere

+7

これはJSONではありません。 JSONは関数を表現することはできません。あなたが持っているものは、単純な* Javascriptオブジェクトです。* – deceze

+0

@deceze:それを指摘してくれてありがとう。 –

答えて

0

私はそれを働かせました。私は転記する前にこれを試しておくべきだった。 ユーザー:

{ 
    legend:{ 
      click : function(legendSelectedText){ 
       //do your operations 
      } 
    } 
} 

チャート機能:

legenditem.addEventListener("click",function(){ 
    var legenditem = //get legendtext from code behind; 
    chartObject.legend.click(legenditem); 
}); 
0

を決定するために、どのようにあなたは、新しい関数を作成し、それを実行してみてくださいすることができます。

var obj = JSON.parse(yourstring); 
var func = new Function(obj.MyFunction); 
func(); 

注:あなたの関数は、文字列の形式ではなく、これが機能するためのコードの形式でなければなりません。ただし、セキュリティ上のリスクがあります。

関連する問題