作者StarTouching (撫星)
看板Ajax
標題[問題] 為何FF無法藉由new Function()傳遞事件?
時間Tue Jan 15 18:18:46 2013
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
1F:→ TonyQ:不是setAttribute 的問題 是要手動傳 event 這個參數進去。 01/15 18:37
2F:→ TonyQ:ex. 01/15 18:37
3F:→ TonyQ:document.getElementById("test").onclick= 01/15 18:37
4F:→ TonyQ: new Function("alert(event);"); 01/15 18:37
5F:→ TonyQ:早期寫跨瀏覽器的 event 相容,標準寫法都是這樣寫的 01/15 18:37
6F:→ TonyQ:dom.onclick = function(event){ 01/15 18:38
7F:→ TonyQ:event = event || window.event ; 01/15 18:38
8F:→ TonyQ:// do something 01/15 18:38
9F:→ TonyQ:} 01/15 18:38
10F:→ StarTouching:不過就算我把event加上去 01/15 18:39
11F:→ StarTouching:Fx錯誤主控台還是會說 event not defined 01/15 18:39
※ 編輯: StarTouching 來自: 1.162.194.103 (01/15 18:42)
12F:→ TonyQ:為什麼 arguments[0] 沒抓到 event 01/15 18:42
13F:→ StarTouching:所以我找來找去 還是只找到setAttr的寫法 01/15 18:42
15F:→ TonyQ:你 keyVerify 有放 event 當第一個 param 嗎? 01/15 18:44
16F:→ TonyQ:我覺得你要嘛就乾脆一點把 code 放齊 XD 01/15 18:44
17F:→ TonyQ:這樣一邊寫一半很容易掉東西 01/15 18:44
18F:→ StarTouching:我找到問題了 Fx要把event當作function參數 01/15 18:47
19F:→ StarTouching:i.e. Function("event", "if(keyVerify(event)")...) 01/15 18:48
20F:→ StarTouching:不過還是沒搞懂 正在思索中... 01/15 18:49
21F:→ StarTouching:我想最好的解釋是 匿名函式必須傳遞event參數 01/15 18:51
22F:→ StarTouching:內部不會自動獲得event 01/15 18:52
23F:→ StarTouching:所以說 IE和Chrome能執行 應該都是因為window.event 01/15 18:53
24F:→ StarTouching:另外像html onclick=後面的部分自動就會有event傳入 01/15 18:57
25F:→ StarTouching:主要差異在這裡 01/15 18:57