为什么Click处理程序不适用于此Raphael对象?

时间:2012-07-06 01:10:29

标签: javascript javascript-events event-handling svg raphael

我目前的项目是美国的热图:

http://up.massrelevance.com/cnbc/top-states/heatmap.html

它是在拉斐尔和一些预先打包的库的帮助下渲染的,以生成各州的路径。在我的代码中的某个时刻,我生成一个对Raphael对象的引用数组,代表每个状态;然后我迭代它们,使用Raphael的projection.map方法将每个点击处理程序(实际的Raphael对象存储在.click()中)附加:

Heatmap.prototype.stateClick = function() {
  var projection, 
      state, 
      _this = this;
  for (state in this.projections) {
    projection = this.projections[state];
    console.log(state);
    console.log(projection.map[0]);
    (function(state, projection) {
      projection.map.click(function() {
        _this.overlay.update(state, _this.states[state]);
        _this.overlay.reveal();
      });
    })(state, projection);
  }
};

这适用于50个州中的48个州。但是,出于某种原因,阿拉斯加(AK)和俄克拉荷马(OK)似乎没有获得点击处理程序 - 也就是说,当我点击它们时,没有任何反应。

在上面的代码中观察控制台输出console.log个调用,我看不出AK&的Raphael对象之间有任何差异。好吧,任何其他国家的目标,所以我很困惑原因可能是什么。

任何人都可以确定或猜测发生了什么,或者可能会建议我如何进一步调试这个问题?有没有关于如何绘制这些形状(例如,可能没有完全封闭的路径?)可能导致点击处理程序无法附加?

谢谢!

1 个答案:

答案 0 :(得分:0)

Sheesh,想通了。我在阿拉斯加州(AK)的州代码中输入了一个拼写错误,而不是使用OK。这就解释了为什么那些是两个问题状态。我花了一个多小时深入研究这个问题,直到休息一下后,我用一双新鲜的眼睛,立刻发现了错字。