我在删除事件监听器时遇到了困难,因为chart
仅适用于我需要创建命名函数的非任何函数。问题是我无法弄清楚如何在不调用函数的情况下将toggleLabels
变量传递给var chart = {}; // Big object
labelToggle.addEventListener('click', toggleLabels);
function toggleLabels(chart) {
scope.graph.isLabelsVisible = chart.isLabelsVisible = !chart.isLabelsVisible;
for (i = 0; i < length; i++) {
chart.series[i].isLabelsVisible = !chart.series[i].isLabelsVisible;
chart.series[i].hide();
chart.series[i].show();
};
};
函数。
我试着看this question,但没有回答。
这可能吗?
{{1}}
答案 0 :(得分:1)
传递参数时,可以使用“匿名函数”,使用参数调用指定函数:
labelToggle.addEventListener("click", function() {
toggleLabels(chart);
});
var a = 5;
var b = 7;
document.getElementById('btn').addEventListener("click", function() {
myFunction(a, b);
});
function myFunction(x, y) {
var result = x + y;
console.log(result);
}
<button id="btn">Click here!</button>
答案 1 :(得分:0)
你可以做的是使toggleLabels成为图表的一个功能。例如:
function chart(series) {
this.series = series;
this.toggleLabels = function (name) {
for (i = 0; i < lthis.series.ength; i++) {
chart.series[i].isLabelsVisible = !this.series[i].isLabelsVisible;
this.series[i].hide();
this.series[i].show();
};
};
}
然后只需操作chart
对象:
chart.series
chart.toggleLabels()
然后,你应该能够做到以下几点:
labelToggle.addEventListener('click', chart.toggleLabels);
答案 2 :(得分:0)
您可以返回这样的函数:
var chart = {}; // Big object
labelToggle.addEventListener('click', toggleLabels(chart));
function toggleLabelsCls(chart) {
return function(chart) {
scope.graph.isLabelsVisible = chart.isLabelsVisible = !chart.isLabelsVisible;
for (i = 0; i < length; i++) {
chart.series[i].isLabelsVisible = !chart.series[i].isLabelsVisible;
chart.series[i].hide();
chart.series[i].show();
};
}
};
答案 3 :(得分:0)
可以使用partial application:
来完成labelToggle.addEventListener('click', toggleLabels.bind(this,chart));
答案 4 :(得分:0)
这是最短的解决方案:
labelToggle.addEventListener('click', function(){toggleLabels(chart)});