IE中win.event赋值后始终未定义求助(Chrome/FF运行正常)
解决IE下跨Frame赋值window.event无效的问题
我来帮你搞定这个IE专属的坑!你的代码在Chrome和Firefox正常运行,但IE里win.event始终是undefined,核心原因是IE的window.event对象是只读的,而且只能在事件触发的原生上下文里获取,跨Frame直接赋值根本不会生效。
问题分析
你原本想把rowActionTarget通过win.event传递到子Frame的action代码里,但IE不允许手动修改window.event——这个对象是IE在事件触发时自动生成的,外部赋值完全无效,所以你才会看到它一直是undefined。另外还要注意,IE里获取事件目标元素用的是event.srcElement,不是标准的event.target,原来的代码在IE里获取rowActionTarget本身就可能有问题。
解决方案:绕过window.event,直接传递目标元素
我们换个思路,不依赖event对象来传递rowActionTarget,而是直接把这个元素作为参数传入要执行的action代码中,同时补上IE的兼容处理:
newInvoker: function(src, action) { var srcWindowName = src.name; // 兼容IE的事件目标获取:IE用srcElement,其他浏览器用target var rowActionTarget = this.event.target || window.event.srcElement; return function(evt) { if (!evt) var evt = window.event; var win = window.frames["tableContentFrame"].frames[srcWindowName]; // 把action包装成接收target参数的函数,直接传入rowActionTarget win.eval(` (function(target) { ${action} })(${rowActionTarget}); `); tvc.rowActionHandler.hideContainer(); tvc.stopBubbleEvent(evt); }; }
适配你的action代码
如果你的action代码里原本是通过event来获取目标元素的(比如var elem = event.target),只需要把action里的event替换成我们传入的target参数即可,比如改成var elem = target。
内容的提问来源于stack exchange,提问作者Rohith H S
相关产品推荐
相关产品推荐

