为什么RaphaelJS中的这个事件处理程序会立即运行?

时间:2011-11-21 23:46:55

标签: javascript jquery event-handling raphael

为什么RaphaelJS(2.0.0)中的此事件处理程序会立即运行而不是单击它时?

function enlarge (shape) {
  shape.animate({'transform' : 's2'}, 200);
}

jQuery(function () {
  var paper = Raphael("canvas", 1000, 1000);
  var button = paper.circle(300, 50, 20);
  button.attr({'fill':'black'});

  var circle = paper.circle(50, 50, 20);
  circle.attr({'fill':'red'});

  button.mousedown(enlarge(circle));
});  

2 个答案:

答案 0 :(得分:3)

因为你立即打电话

使用以下代码替换button.mousedown(enlarge(circle));

button.mousedown(function() {
    enlarge(circle)
});

答案 1 :(得分:3)

.mousedown()期望函数引用作为其参数。相反,您正在调用一个函数,并且所有.mousedown()获取的参数都是undefined。由于您需要将circle传递给enlarge(),因此无法直接传递enlarge的引用。而是将您的呼叫包裹在函数中的enlarge()

button.mousedown(function () {
    enlarge(circle);
});