0
Raphael設置接受事件處理程序嗎?當我在raphael集上設置一個事件處理程序時,似乎將它分配給集合中的每個Raphael形狀,而不是集合本身,因爲如果您嘗試單擊該集合,您可以在此處看到:Raphael設置接受事件處理程序嗎?
http://jsbin.com/aponen/3/edit
我對各種黑客不感興趣,例如通過自定義屬性或類似方法在集合中鏈接元素。
感謝
Raphael設置接受事件處理程序嗎?當我在raphael集上設置一個事件處理程序時,似乎將它分配給集合中的每個Raphael形狀,而不是集合本身,因爲如果您嘗試單擊該集合,您可以在此處看到:Raphael設置接受事件處理程序嗎?
http://jsbin.com/aponen/3/edit
我對各種黑客不感興趣,例如通過自定義屬性或類似方法在集合中鏈接元素。
感謝
是,事件處理程序適用於每個單獨的對象 - 拉斐爾不使用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'});
});
我不相信有以本地方式從兒童訪問該集合,但我可能會錯過它。
但是如果存在多個集合,則此解決方案將不起作用。點擊處理程序如何知道哪個組件已被點擊?請注意,在我的實際項目中,有數百個動態集正在生成,所以我需要類似於使用「this」的方法來找到哪個集觸發了事件處理程序。 – smohadjer
這是基本的JS - 不要創建函數或分配事件在一個循環內。在關閉中創建它們。 –
因此,在處理程序中使用「this」關鍵字無法訪問該集合? – smohadjer