2013-01-25 25 views
0

Raphael設置接受事件處理程序嗎?當我在raphael集上設置一個事件處理程序時,似乎將它分配給集合中的每個Raphael形狀,而不是集合本身,因爲如果您嘗試單擊該集合,您可以在此處看到:Raphael設置接受事件處理程序嗎?

http://jsbin.com/aponen/3/edit

我對各種黑客不感興趣,例如通過自定義屬性或類似方法在集合中鏈接元素。

感謝

回答

2

是,事件處理程序適用於每個單獨的對象 - 拉斐爾不使用SVG的<g>元素。但是,您可以用幾個按鍵在這裏解決您的問題:

set.push(rect); 
set.push(circle); 
set.attr({'fill': 'yellow'}); 
set.click(function(evt) { 
    //old 
    this.attr({'fill': 'red'}); 
    //new 
    set.attr({'fill': 'red'}); 
}); 

在它的工作方式,你認爲它可能工作的方式最大的區別就是「這個」內部處理程序的意義。將它更改爲「set」將會解決這個問題。

UPDATE,2013年1月26日 每評論,你也可以附加設定爲所述的孩子一個線,採用Raphael's "data" method

set.push(rect); 
set.push(circle); 

set.data('myset', set); 

set.attr({'fill': 'yellow'}); 
set.click(function(evt) { 
    this.data('myset').attr({'fill': 'red'}); 
}); 

我不相信有以本地方式從兒童訪問該集合,但我可能會錯過它。

+0

但是如果存在多個集合,則此解決方案將不起作用。點擊處理程序如何知道哪個組件已被點擊?請注意,在我的實際項目中,有數百個動態集正在生成,所以我需要類似於使用「this」的方法來找到哪個集觸發了事件處理程序。 – smohadjer

+0

這是基本的JS - 不要創建函數或分配事件在一個循環內。在關閉中創建它們。 –

+0

因此,在處理程序中使用「this」關鍵字無法訪問該集合? – smohadjer