当使用“this”时,函数会丢失上下文 - Raphael JS

时间:2012-05-09 18:44:05

标签: javascript raphael

我正在循环一个物体并在拉斐尔创造圈子。在我创建的每个圆圈上,我附加了一个click事件和一个mouseover事件。但是,当我使用“this”将圆圈移到前面时,例如this.toFront(),然后我的.click函数不起作用。如果我对this.toFront()发表评论,那么我的点击功能会按预期工作。

你能帮助我理解我做错了什么吗?

//dummy variables for example
var x_coord = '31';
var y_coord = '50';
var diameter = '80';
var opportunityUrl = 'http://www.google.com';
var fillColorStart = '#000';
var fillColorEnd = '#FF0000';

var p = paper.circle(x_coord, y_coord, diameter)
.data("i", i)
.click(function() {
   alert(opportunityUrl);
})
.mouseover(function() {
   this.toFront();
})
.attr({"fill": "90-"+fillColorStart+":5-"+fillColorEnd+":95","fill-opacity": 0.5})
.glow({color: "#4b4b4b", width: 7})

2 个答案:

答案 0 :(得分:1)

虽然我不确定Raphael是如何完全工作的,但我认为this在这种情况下是指窗口对象。这会破坏事件链,这可能会破坏对象上的所有事件,这会导致.click()无法正常工作。

答案 1 :(得分:0)

我已经回答了类似的问题here。基本上,匿名函数中的this指针并不是指您的想法。

在你的情况下,做Elliot上面所说的可能是最简单的解决方案。