Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >javascript中的"this“在Internet Explorer中的行为有所不同

javascript中的"this“在Internet Explorer中的行为有所不同
EN

Stack Overflow用户
提问于 2015-07-23 09:06:23
回答 2查看 73关注 0票数 1

我有以下功能:

代码语言:javascript
运行
AI代码解释
复制
function toggleContent()
{
    var parent = this.parentElement;

    toggleClass(parent,"detailsAreVisible");
}

当用户单击某个按钮时,将调用此函数。绑定发生在普通的javascript中,如下所示:

代码语言:javascript
运行
AI代码解释
复制
var allTogglingButtons = document.querySelectorAll("[unhideicon],[hideicon]");
crossBrowserAddClickEvent(allTogglingButtons, toggleContent);

crossBrowserAddClickEvent函数是修复另一个IE问题所必需的:

代码语言:javascript
运行
AI代码解释
复制
function crossBrowserAddClickEvent(array, functionName)
{   
    for(var i=0; i < array.length; i++)
    {
        if (array[i].addEventListener)
        {
            aray[i].addEventListener('click', functionName); 
        }
        else if (array[i].attachEvent)
        {
            array[i].attachEvent('onclick', functionName);
        }   
    }
}

这在chrome和火狐中运行得很好,因为" This“变量被设置为我在toggleContent函数中点击的按钮。然而,在IE中,"this“等于(默认的)全局窗口/文档对象,当然,对它调用.parentElement会产生null。为什么“这”不是被点击的按钮?

作为参考,我点击的"button“实际上是一个svg元素:

代码语言:javascript
运行
AI代码解释
复制
<svg unhideicon class="svgIcon">    ....    </svg>
EN

回答 2

Stack Overflow用户

发布于 2015-07-23 09:12:24

这是一个众所周知的Exlorer问题,您必须使用事件对象来获取调用者

代码语言:javascript
运行
AI代码解释
复制
function toggleContent(e)
{
    var event = e || window.event;
    var parent = (event.target || event.srcElement).parentElement;

    toggleClass(parent,"detailsAreVisible");
}
票数 3
EN

Stack Overflow用户

发布于 2015-07-23 09:16:34

实际的问题不是因为IE,而是因为attachEventaddEventListener的不同之处。您应该注意到,您的代码在IE9+中运行良好,因为它将像Chrome和Firefox一样使用addEventListener。因为IE8使用了attachEvent,所以需要有一点不同的处理。

我建议你使用call来调用函数,这样你就可以定义this是什么,在这种情况下,你可以告诉它是你附加事件的元素:

代码语言:javascript
运行
AI代码解释
复制
// other code.
else if (array[i].attachEvent)
{
    var element = array[i];
    (function (el){
        el.attachEvent('onclick', function () {
            functionName.call(el);
        });
    })(element);
}

使用此方法意味着您不必更改toggleContent函数代码

Here is a working example

请注意,我使用了闭包来避免您的循环出现问题。因为单击事件函数会在单击时运行,这意味着它将使用i的当前值(而不是附加事件时设置的值)。因此,无论您单击哪个元素,i都将始终等于array.length。这不仅是错误的号码,而且也是越界的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31582848

复制
相关文章
SignalR 在IE中无法工作 - Internet Explorer
运行基于SignalR的超线程上载器的代码,发现SignalR 在IE 9上居然没法工作了,提示如下: 提示很明显,需要json2.js的支持。 使用Nuget 搜索json2.js 并安装: 在引用
张善友
2018/01/29
3.4K0
SignalR 在IE中无法工作 - Internet Explorer
在 Internet Explorer 中使用 Google Chrome
随着 JavaScript 性能的提升以及 HTML5 对 HTML 的加强,现在在线程序基本上可以做以前桌面软件做的事情了,不过现在所面临的问题是这些最新 Web 技术依旧不能得到 Internet Explorer 这个市场占有率最高浏览器的支持,但是开发人员又不能忽视 IE 的用户,因为绝大多数用户都在使用某个版本的 IE,所以前段程序员最大的痛苦就是要做很多额外的工作使他们的程序能够在 IE 上运行。 为了能够让 IE 用户也能顺畅跑 Web 程序,Google 开发了 Google Chrome Frame 这个开源插件,它会自动让 IE 使用 WebKit 渲染引擎来解析网页,这样 IE 浏览器就可以和 Chrome 浏览器一样拥有一个更快 JavaScript 引擎,并且支持最新的 Web 技术,如 HTML5 的离线功能,Canvas 和 audio,video 等标签,以及 CSS3 技术等。
Denis
2023/04/14
8450
在 Internet Explorer 中使用 Google Chrome
浏览器平台:Internet Explorer 8
    IE8是浏览器的一个新时代的开始。从IE8上,我们可以看到很多改变。从看得见的地方,可能就是Activities和WebSlices,但内核发生了翻天覆地的变化,不亚于于从Win98变化到Win2000。     IE8是面向服务的,不像以前的IE仅仅是一个解析和展示Web页面的一个解析器。IE8新增了非常多的特性来支持服务,IE8已经是一个在线服务的平台,IE8的插件或者说服务,都可以在线安装,插件也是Web化的。从本质上来说,IE8与前面版本或者说与所有其它的浏览器都是不同的。IE8的口号是:
张善友
2018/01/30
1K0
如何在 Windows 10 中移除 Internet Explorer 浏览器 如何通过控制面板删除 Internet Explorer 浏览器通过 PowerShell 删
现在 Internet Explorer (IE)已经过时了,可以通过控制面板移除这个古老但是依然是一个伟大的浏览器
林德熙
2019/03/13
1.9K0
Microsoft Internet Explorer 6单文件版本
作者:matrix 被围观: 964 次 发布时间:2013-09-28 分类:零零星星 | 无评论 »
HHTjim 部落格
2022/09/26
6600
Microsoft Internet Explorer 6单文件版本
Unsupported/Fake Internet Explorer Version MSIE 4.
"Unsupported/Fake Internet Explorer Version MSIE 4"
公众号图幻未来
2023/10/08
2330
JSON 在JavaScript 中的使用。
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
愷龍
2022/10/06
10.2K0
无法分析响应内容,因为 Internet Explorer 引擎不可用,或者 Internet Explorer 的首次启动配置不完整
powershell里执行wget 、curl等命令时,报错:无法分析响应内容,因为 Internet Explorer 引擎不可用,或者 Internet Explorer 的首次启动配置不完整
Windows技术交流
2023/01/07
3.4K0
Internet Explorer漏洞分析(二)——CVE-2013-2551
1.本文一共2850个字 29张图 预计阅读时间11分钟2.本文作者erfze 属于Gcow安全团队复眼小组 未经过许可禁止转载3.本篇文章从CVE-2013-2551漏洞的分析入手 详细的阐述漏洞的成因以及如何去利用该漏洞4.本篇文章十分适合漏洞安全研究人员进行交流学习5.若文章中存在说得不清楚或者错误的地方 欢迎师傅到公众号后台留言中指出 感激不尽
Gcow安全团队
2021/03/04
4760
行为设计模式及其在JVM中的应用
在上篇文章中我们说到创建者设计模式。 现在我们来看看行为设计模式。 这些模式关注我们的对象如何相互交互或者我们如何与它们交互。
从大数据到人工智能
2022/01/20
9980
在JavaScript中仿真Java的enum
背景 最近开始做的一个项目使用facebook的ReactJS前端框架。发现经常使用react的keyMirror工具来定义一些枚举常量: var keyMirror = require('keyMirror'); var AppMode = keyMirror({ LOG_IN: null, SIGN_UP: null }); module.exports = AppMode; 其他JS代码对该枚举的引用大概如下代码: var AppMode = require('../const/app
老码农
2018/06/27
2.4K0
解决 JavaScript 中 parseInt() 的一个怪异行为
parseInt() 是一个内置的 JavaScript 函数,它可以将数字字符串解析为整数。比如,我们将数字字符串 '100' 解析为整数:
Jimmy_is_jimmy
2022/12/07
1.6K0
图数据 3D 可视化在 Explorer 中的应用
前言图数据可视化是现代 Web 可视化技术中比较常见的一种展示方式,NebulaGraph Explorer 作为基于 NebulaGraph 的可视化产品,在可视化图数据领域,尤其是在图形渲染性能等领域积累了较丰富的经验。本文将系统性分享 NebulaGraph Explorer 在 3D 图数据展示上的一些应用。以下演示皆可在 https://explorer.nebula-graph.com.cn/explorer 在线试用。二维力导图目前业界常用的图数据展示都采用 2D 力导图的逻辑,如下图所示:
NebulaGraph
2022/11/03
7500
图数据 3D 可视化在 Explorer 中的应用
Internet Explorer漏洞分析(三)[下]——CVE-2014-6332
•编号:CVE-2014-6332•漏洞影响:远程代码执行(RCE)•CVSS 2.0:9.3
Gcow安全团队
2021/03/22
9720
Internet Explorer漏洞分析(三)[下]——CVE-2014-6332
Internet Explorer漏洞分析(三)[上]——VBScript Scripting Engine初探
近来分析Internet Explorer历史漏洞,遂对VBScript脚本解析引擎进行研究,具体环境如下:
Gcow安全团队
2021/03/19
9240
JVM中的线程行为
线程化是指同时执行程序过程以提高应用程序性能的实践。虽然直接在业务应用程序中使用线程并不常见,但它们一直在Java框架中使用。
银河1号
2019/04/12
1.1K0
JVM中的线程行为
在JavaScript中的数据结构(队列)
理所有的任务,它被称为事件循环。浏览器要负责多个任务,如渲染HTML,执行JavaScript代码,处理用户交互(用户输入、鼠标点击等),执行和处理异步请求。
肥晨
2023/06/27
3440
在JavaScript中的数据结构(队列)
适配器在JavaScript中的体现
适配器设计模式在JavaScript中非常有用,在处理跨浏览器兼容问题、整合多个第三方SDK的调用,都可以看到它的身影。 其实在日常开发中,很多时候会不经意间写出符合某种设计模式的代码,毕竟设计模式就是老前辈们总结提炼出来的一些能够帮助提升开发效率的一些模版,源于日常的开发中。 而适配器其实在JavaScript中应该是比较常见的一种了。
贾顺名
2019/12/05
1.4K0
Internet Explorer 安装指定版本浏览器方法,ie的降级和升级
首先你需要知道指定版本的补丁。比如 11.0.145 是 KB4516045。如果你要的版本低就卸载补丁。如果要的版本高就安装新的补丁。
小蓝枣
2020/09/23
1.7K0
点击加载更多

相似问题

Javascript在Internet Explorer中的行为很有趣

32

包含xml/html数据的jquery在internet explorer中的行为有所不同。

10

Div标记在Internet Explorer上的行为有所不同

11

javascript在internet explorer中的调试

21

Internet Explorer中的jScrollPane奇怪行为

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文