如何将变量传递给事件侦听器函数?

时间:2016-07-28 12:27:27

标签: javascript

我在删除事件监听器时遇到了困难,因为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}}

5 个答案:

答案 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)});