Re: [問題] 為何FF無法藉由new Function()傳遞事件?

看板Ajax作者 (小殘)時間12年前 (2013/01/19 14:23), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/5 (看更多)
※ 引述《StarTouching (撫星)》之銘言: : Fx乃利用事件所呼叫的函式 額外加一個事件參數 藉以傳遞參數 : 不過 透過動態方式給定的事件 卻發生錯誤?? : //用迴圈一一指定node的事件行為 : : node.onclick = new Function("if(keyVerify(event)==0)toPage("+i+")"); : // keyVerify()判斷是否為左鍵 然後執行toPage(i) : 不過我發現keyVerify裡面抓不到event : event = event || window.event; : 但是如果透過html就可以抓到event: : <a onClick="if(keyVerify(event)==0)toPage(0);">foooool!</a> : 滿奇怪的 IE 和 Chrome都可以, : 為什麼就Fx要用下面這種奇怪的方法? : node.setAttribute("onClick", "if(keyVerify(event)==0)toPage("+i+");"); : 有onclick可以用 setAttribute拿來設定事件還滿怪的吧? 針對"event"這個參數在HTML事件屬性中可以直接使用的原因做個說明 其實原理很簡單,瀏覽器將事件屬性自動使用了 function(event) { } 包裝了起來 例如 <input onclick="alert('test');" ... 瀏覽器實際上是當成這樣處理 <input onclick=function(event) { alert('test'); } ... 所以直接使用event這個變數是存在的,而大多數的瀏覽器也是這樣處理,以符合規範 包含FF、Chrome、IE9之後的版本等.. 不過早期IE版本(IE8之前)是這樣處理 <input onclick=function() { alert('test'); } ... 而之所以event可以使用,是使用了全域變數的window.event,也就是上一篇版友所說明 你可以很簡單的用下面的方式來測試不同瀏覽器,就可以知道他們的實作方式 <input onclick="alert(arguments.callee)" type="button" value="test" /> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.105.211.107

01/19 15:30, , 1F
感謝!
01/19 15:30, 1F
文章代碼(AID): #1G-ZlApU (Ajax)
文章代碼(AID): #1G-ZlApU (Ajax)