我有以下功能
var label = function() {
return 'File: '+texts[t];
};
附加到highcharts,在此处指定 http://api.highcharts.com/highcharts#plotOptions.pie.dataLabels.formatter
其中t
的值为1到10,text[t]
对应不同的文字。我将此函数附加到10 highchart tooltips
,以便它使用mouseOver
事件执行函数。
预期的逻辑是图表1出现text[1]
标签,图表6有text[6]
等等。
问题是所有图表都出现text[10]
,因为t
在执行函数时具有该值。
我该如何解决这个问题?它是eval()
喜欢
var label = function() {
return 'File: '+eval(texts[t]);
};
更新:根据评论,尝试
var label = function(t) {
return 'File: '+t+' '+texts[t];
};
没有按预期工作,它打印"文件:[object Object] undefined"
答案 0 :(得分:2)
这是一个非常常见的关闭问题:
你可能有一个for循环,只需将处理程序附加到另一个函数中的代码包裹起来:
// This will not work the way you might expect
// The value of i is left at 10 because that is the last
// time it is changed in the attacheHandlers1 scope held
// but the closure in the anonymous function used as a callback
// in setTimeout
//
function attachHandlers1(){
for(var i = 0; i < 10 ; i++){
setTimeout(function(){
console.log("Version 1", i);
}, 100)
}
}
// This works because the value is closured in
// attachHandlerImpl as 'x' with different values for
// each invocation
//
function attachHandlers2(){
for(var i = 0; i < 10 ; i++){
attachHandlerImpl(i);
}
}
function attachHandlerImpl(x){
setTimeout(function(){
console.log("Version 2", x);
}, 100);
}
attachHandlers1();
attachHandlers2();
将输出:
Version 1 10
Version 1 10
Version 1 10
Version 1 10
Version 1 10
Version 1 10
Version 1 10
Version 1 10
Version 1 10
Version 1 10
Version 2 0
Version 2 1
Version 2 2
Version 2 3
Version 2 4
Version 2 5
Version 2 6
Version 2 7
Version 2 8
Version 2 9
答案 1 :(得分:0)
在不知道其余实施细节的情况下,这样的事情可以起作用:
var texts = ['Text 1', 'Text 2', 'Text 3']
var label = function(idx) {
return "File: " + texts[idx];
};
label(2)
返回&#34;文件:文字3&#34;