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

看板Ajax作者 (撫星)時間12年前 (2013/01/15 18:18), 編輯推噓0(0025)
留言25則, 2人參與, 最新討論串1/5 (看更多)
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拿來設定事件還滿怪的吧? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.162.194.103

01/15 18:37, , 1F
不是setAttribute 的問題 是要手動傳 event 這個參數進去。
01/15 18:37, 1F

01/15 18:37, , 2F
ex.
01/15 18:37, 2F

01/15 18:37, , 3F
document.getElementById("test").onclick=
01/15 18:37, 3F

01/15 18:37, , 4F
new Function("alert(event);");
01/15 18:37, 4F

01/15 18:37, , 5F
早期寫跨瀏覽器的 event 相容,標準寫法都是這樣寫的
01/15 18:37, 5F

01/15 18:38, , 6F
dom.onclick = function(event){
01/15 18:38, 6F

01/15 18:38, , 7F
event = event || window.event ;
01/15 18:38, 7F

01/15 18:38, , 8F
// do something
01/15 18:38, 8F

01/15 18:38, , 9F
}
01/15 18:38, 9F

01/15 18:39, , 10F
不過就算我把event加上去
01/15 18:39, 10F

01/15 18:39, , 11F
Fx錯誤主控台還是會說 event not defined
01/15 18:39, 11F
※ 編輯: StarTouching 來自: 1.162.194.103 (01/15 18:42)

01/15 18:42, , 12F
為什麼 arguments[0] 沒抓到 event
01/15 18:42, 12F

01/15 18:42, , 13F
所以我找來找去 還是只找到setAttr的寫法
01/15 18:42, 13F

01/15 18:43, , 14F
01/15 18:43, 14F

01/15 18:44, , 15F
你 keyVerify 有放 event 當第一個 param 嗎?
01/15 18:44, 15F

01/15 18:44, , 16F
我覺得你要嘛就乾脆一點把 code 放齊 XD
01/15 18:44, 16F

01/15 18:44, , 17F
這樣一邊寫一半很容易掉東西
01/15 18:44, 17F

01/15 18:47, , 18F
我找到問題了 Fx要把event當作function參數
01/15 18:47, 18F

01/15 18:48, , 19F
i.e. Function("event", "if(keyVerify(event)")...)
01/15 18:48, 19F

01/15 18:49, , 20F
不過還是沒搞懂 正在思索中...
01/15 18:49, 20F

01/15 18:51, , 21F
我想最好的解釋是 匿名函式必須傳遞event參數
01/15 18:51, 21F

01/15 18:52, , 22F
內部不會自動獲得event
01/15 18:52, 22F

01/15 18:53, , 23F
所以說 IE和Chrome能執行 應該都是因為window.event
01/15 18:53, 23F

01/15 18:57, , 24F
另外像html onclick=後面的部分自動就會有event傳入
01/15 18:57, 24F

01/15 18:57, , 25F
主要差異在這裡
01/15 18:57, 25F
文章代碼(AID): #1GzIq8kb (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1GzIq8kb (Ajax)