0

マウスオーバーイベントで各dataLabel(単に「highlightPoint()」と呼ぶ)関数を追加したいと思います。この関数を単一のポイントに追加すると機能します。

chartObj.series[0].data[1].dataLabel.on("mouseover", function () {
                chartObj.series[0].data[1].setState('hover');
            });

ループしてデータ ポイントをスローすると機能しません。個々のポイントへの参照が間違っているか、そのようなものだと思います。

jsfiddle リンク

4

2 に答える 2

1

両方のデータ セットをループした後、i = 2 および k = 1 になります。したがって、マウス イベントは常に i=2 および k=1 を使用してデータ ポイントにアクセスしようとしますが、これはもちろん範囲外です。このフィドルを参照してください: http://jsfiddle.net/bLvfS/1/

for (var i = 0; i < chartObj.series.length; i++) {
    for (var k = 0; k < chartObj.series[i].data.length; k++) {
        var onmouseover = function(u, j) {
            return function() {chartObj.series[u].data[j].setState('hover');};
        }
        var onmouseout = function(u, j) {
            return function() {chartObj.series[u].data[j].setState();};
        }
        chartObj.series[i].data[k].dataLabel.on("mouseover", onmouseover(i,k));
        chartObj.series[i].data[k].dataLabel.on("mouseout", onmouseout(i,k));
    }
}

現在の i,k ペアを渡され、マウス イベントで実行する実際の関数を返す関数を追加しました。誰かがより良い解決策を持っているかもしれません...しかし、それはうまくいくようです。

于 2013-08-16T21:03:18.443 に答える
1

問題はクロージャにあります。フィドルの動作を参照してください: http://jsfiddle.net/Fusher/bLvfS/2/

        for (var i = 0; i < chartObj.series.length; i++) {
            for (var k = 0; k < chartObj.series[i].data.length; k++) {
                (function(i,k){
                    chartObj.series[i].data[k].dataLabel.on("mouseover", function () {
                        chartObj.series[i].data[k].setState('hover');
                    });
                    chartObj.series[i].data[k].dataLabel.on("mouseout", function () {
                        chartObj.series[i].data[k].setState();
                    });
                })(i,k);
            }
        }
于 2013-08-19T08:24:47.973 に答える