Raphael 集是否接受事件处理程序?当我在 raphael 集上设置事件处理程序时,它似乎被分配在集内的每个 Raphael 形状上,而不是集本身,如果您尝试单击集,您可以在此处看到:
http://jsbin.com/aponen/3/edit
我对各种 hack 不感兴趣,例如通过自定义属性或类似方法将集合内的元素与集合本身链接起来。
谢谢
Raphael 集是否接受事件处理程序?当我在 raphael 集上设置事件处理程序时,它似乎被分配在集内的每个 Raphael 形状上,而不是集本身,如果您尝试单击集,您可以在此处看到:
http://jsbin.com/aponen/3/edit
我对各种 hack 不感兴趣,例如通过自定义属性或类似方法将集合内的元素与集合本身链接起来。
谢谢
是的,事件处理程序单独应用于每个对象——Raphael 不使用<g>
SVG 的元素。但是,您可以通过几个按键来解决您的问题:
set.push(rect);
set.push(circle);
set.attr({'fill': 'yellow'});
set.click(function(evt) {
//old
this.attr({'fill': 'red'});
//new
set.attr({'fill': 'red'});
});
它的工作方式和您认为它可能工作的方式的最大区别是处理程序中“this”的含义。将其更改为“设置”将解决该问题。
更新,2013 年 1 月 26 日根据评论,您还可以使用Raphael 的“数据”方法 将集附加到集的子集的一行:
set.push(rect);
set.push(circle);
set.data('myset', set);
set.attr({'fill': 'yellow'});
set.click(function(evt) {
this.data('myset').attr({'fill': 'red'});
});
我不相信有一种本地方式可以从孩子那里访问该集合,但我可能会错过它。