我们都知道 IE 和 FireFox 对「事件」取得的方式 不一样
(1) IE 可利用全局变量 window.event
(2) FireFox 可利用传递参数的方法来取得 event ,或者如果没有传递参数,则系统会自动将「事件」放在第一个参数 arguments[0]
(1) 如果
e = arguments.callee.caller.arguments[0] || window.event;
写成
e = arguments[0] || window.event;
FireFox 在按下button后不会有反应,而且会在控制台出现「TypeError: e is undefined」的错误信息
也就是 arguments[0]前面一定要加 arguments.callee.caller
(2) 如果这两句
e = arguments.callee.caller.arguments[0] || window.event;
a = e.target || e.srcElement;
合并成一句也会出错
(2-1) 如果合并成
var a = arguments.callee.caller.arguments[0].target || window.event.srcElement;
则 FireFox不会出错,因為FireFox的正确式写在前面
IE 则会出现「无法取得属性'target'的值:物件為null或未经定义」的错误
(2-2) 如果合并成
var a = window.event.srcElement; | arguments.callee.caller.arguments[0].target
IE 不会错,因為这次是IE的正确式写在前面
FireFox 就会出现「TypeError: window.event is undefined」的错误
(2-3)也就是一定要先得到正确表示的「事件」,再利用该「事件」来读取「触发事件的源头」,一定要分两步,不能合成一步