2016-07-28 66 views
0

我很難刪除一個事件監聽器,因爲removeEventListener只適用於我需要做非命名函數的非任意函數。問題是我不知道如何將chart變量傳遞給toggleLabels函數,而不用調用函數,而我這樣做。如何傳遞給事件監聽器函數的變量?

我試過看this question,但沒有答案的工作。

這可能嗎?

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(); 
    }; 
    }; 
+0

我通常在html的主體中使用事件監聽器,在那裏,你可以直接傳遞參數(例如''onclick ='foo(「toto」)'') – HolyDanna

+0

@HolyDanna這是一種可怕的做法,不幸的是不能這樣做。 – Chrillewoodz

+0

我知道,但我儘量不使用太多的事件監聽器,任何方式。也許這篇文章(http://stackoverflow.com/questions/256754/how-to-pass-arguments-to-addeventlistener-listener-function#256763)可以幫助你找到解決方案 – HolyDanna

回答

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); 
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(); 
     }; 
    } 
    }; 
0

這裏最短的解決方案:

labelToggle.addEventListener('click', function(){toggleLabels(chart)}); 
+0

這不是全球性的,它只是一個例子。它傳遞給外部函數。 – Chrillewoodz

+0

我知道了。我編輯了答案 –

+0

哦,我知道@Kld已經像我一樣回答了。他的解決方案是對的。 –

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>

+0

這是否允許解除綁定事件偵聽器? – Chrillewoodz

相關問題