You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:09:10