Re: [討論] 關於event handler

看板Ajax作者 (冒牌費大公)時間17年前 (2008/11/25 15:03), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串2/3 (看更多)
剛剛看了一下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)

11/25 15:37, , 1F
嗯..我昨天想了一下也是朝handler下手.
11/25 15:37, 1F

11/25 15:38, , 2F
也很好奇 js core不知道有沒有提供handler本身的調用.:p
11/25 15:38, 2F

11/25 21:44, , 3F
沒有。是可以用for(var i in elem), i.indexOf('on')...
11/25 21:44, 3F

11/25 21:50, , 4F
等方式找到element的特定event handler,例如onclick,但
11/25 21:50, 4F

11/25 21:51, , 5F
是jquery應該只是assign一個proxy給他,然後透過這個proxy
11/25 21:51, 5F

11/25 21:52, , 6F
來呼叫jquery自己維護的handler。
11/25 21:52, 6F
文章代碼(AID): #19AwDLdd (Ajax)
文章代碼(AID): #19AwDLdd (Ajax)