作者fillano (冒牌費大公)
看板Ajax
標題Re: [討論] 關於event handler
時間Tue Nov 25 15:03:46 2008
剛剛看了一下jquery的原始碼。
jquery用了三層索引,把handler存放在$.cache裡面。
jquery載入時會在那個匿名函數裡面產生一個區域變數叫做expando,在element上面
操作時,會為element加入一個attribute,名稱是expando的值,attribute的值是在
匿名函數裡面遞增的一個區域變數叫做uuid。另外$.event.guid是個由jquery維護的
索引,每加一個handler就會遞增。
理論上,透過$.cache[elem[expando]]['event'][type][guid]就可以取得各個handler
,問題是這個expando封裝在匿名函數裡面,而且應該沒有介面可以存取。
(上面的type可能是'click'....等)
--
Sapere Aude! 這就是啟蒙運動的口號!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.95.16
※ 編輯: fillano 來自: 60.250.95.16 (11/25 15:09)
1F:→ TonyQ:嗯..我昨天想了一下也是朝handler下手. 11/25 15:37
2F:→ TonyQ:也很好奇 js core不知道有沒有提供handler本身的調用.:p 11/25 15:38
3F:→ fillano:沒有。是可以用for(var i in elem), i.indexOf('on')... 11/25 21:44
4F:→ fillano:等方式找到element的特定event handler,例如onclick,但 11/25 21:50
5F:→ fillano:是jquery應該只是assign一個proxy給他,然後透過這個proxy 11/25 21:51
6F:→ fillano:來呼叫jquery自己維護的handler。 11/25 21:52