Browser 的 JavaScript - Event 及其事件源的取得

我们都知道 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)也就是一定要先得到正确表示的「事件」,再利用该「事件」来读取「触发事件的源头」,一定要分两步,不能合成一步 


你可能感兴趣的:(Browser 的 JavaScript - Event 及其事件源的取得)