作者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