为什么点击处理程序不能在这个Raphael对象上工作?

问题描述:

我现在的项目是美国的一个热图:为什么点击处理程序不能在这个Raphael对象上工作?

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

它与拉斐尔的帮助和一对夫妇的预包装库来生成状态的路径呈现。在我的代码中的某个时刻,我生成了代表每个状态的Raphael对象的引用数组;然后,我在它们之间迭代,附加一个单击处理程序,以每(实际拉斐尔对象存储在projection.map)用拉斐尔的.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调用输出的控制台时,我看不到任何其他状态对象的Raphael对象之间的差异,所以我很困惑,究竟是什么原因也许。

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

谢谢!

呃,算了一下。我在阿拉斯加州(AK)的州代码中输入了错字,而不是使用OK。这就解释了为什么这些是两个问题状态。我在一个小时之前深入研究这个问题,直到休息一会之后,我用一双新鲜的眼睛立即发现了这个错字。