我有一個事件偵聽器,即是這樣的(僞代碼):在鼠標懸停上添加事件,如何添加事件一次?
canvas.onmousemove = function (e) { checkCollision(e); };
var checkCollision = function(e){
var context = canvas.getContext('2d');
var coordinates = getMouseXY();
// draw any shape with the context
if(context.isPointInPath(coordinates.X, coordinates.Y){
$(canvas).on('click', alertFunction, e);
return; //stop the function from doing anything else
}
$(canvas).off('click', alertFunction, e);
};
var alertFunction = function(e){
alert("this alert should only show once per click");
};
我預期的結果:當我懸停在畫布上繪製的具體路線,我可以點擊得到一個警報。
實際結果:當我在畫布上點擊我的線條時,出現很多提醒。我的猜測是:對於我移過元素的每個像素,都會添加點擊偵聽器。所以如果我將鼠標懸停在元素上,警報將會播放很多次。如果我將鼠標懸停在元素外部,則將移除每個移動到元素外部的像素的事件偵聽器。
有沒有更好的方法來做到這一點?
看來你綁定了一個被多次調用的函數內部的click事件處理程序,所以事件處理程序一次又一次地被添加。 – adeneo 2015-01-15 15:27:25
不知道我是否理解,但也許你想用jQuery的[one](http://api.jquery.com/one/)函數而不是'on'? – andrusieczko 2015-01-15 15:29:37