作者emn178 (小残)
看板Ajax
标题Re: [问题] 为何FF无法藉由new Function()传递事件?
时间Sat Jan 19 14:23:03 2013
※ 引述《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
1F:推 StarTouching:感谢! 01/19 15:30