解决webkit浏览器中js方法中使用window.event提示未定义的问题

时间:2022-01-03 00:16:28

这实际上是一个浏览器兼容性问题,根源百度中一大堆,简要说就是ie中event对象是全局变量,所以哪里都能使用到,但是webkit内核的浏览器中却不存在这个全局变量event,而是以一个隐式的局部变量的形式传入(后文会详说).

function myfunc(param){
alert(window.event);
} //ie中
<input type="button" onclick="myfunc('testie')" > //一切正常 //webkit浏览器,如chrome,firefox之类的
<input type="button" onclick="myfunc('testwebkit')" > //会提示undefined

然后这里解释一下webkit内核的浏览器是如何隐式传入的event对象.

还是上面那个例子,在webkit浏览器中,onclick="myfunc('testwebkit')" 这句实际上相当于这样的:

onclick(event){
myfunc('testwebkit');
}

换句话说onclick方法的0号参数实际上就是那个隐式传进来的event对象.

然后我们再来看一下js方法中的一种调用:arguments.callee.caller,其中arguments为方法的参数集合,callee为当前参数所在的方法,caller就为调用此方法的方法(或者说调用者).

然后就有如下的对应关系:

function myfunc(param){
alert(arguments.callee); //myfunc()
alert(arguments.callee.caller); //onclick()
alert(arguments.callee.caller.arguments[0]); //event
} //webkit浏览器,如chrome,firefox之类的
<input type="button" onclick="myfunc('testwebkit')" >

这里特别说一句,arguments.callee.caller是可以继续往上追寻调用者的,比如arguments.callee.caller.arguments.callee.caller就是又向上追寻了一级.为何会特别说这个,因为有些时候会遇到自定义标签之类的情况,这种情况中如果有封装和js相关的方法,可能会存在如下这种情况:

onclick(event){
tagCommand(){ //某些情况下的多层嵌套
myfunc('testwebkit');
}
}

此时如果还想在myfunc方法中获取到event对象,就需要连往上追寻2级,使用arguments.callee.caller.arguments.callee.caller.arguments[0]来获取了..

解决webkit浏览器中js方法中使用window.event提示未定义的问题的更多相关文章

  1. 一种KEIL中定义过的变量在使用中提示未定义的情况

    [环境] > KEIL5.25 > win10 > @2018-4-23 [问题] 头文件互包含导致的错误(使用了另一文件的类型定义) 文件<fileA.h> <f ...

  2. tp5模板中js方法中url函数传参的解决办法

    代码如下: layer.msg(data.msg, {icon: 1,time:1500,shade: 0.1}, function(index){ layer.close(index); var s ...

  3. C&num;后台程序与HTML页面中JS方法互调&lpar;功能类似于Ajax中的DWR&rpar;

    此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...

  4. C&num;后台程序与HTML页面中JS方法互调

    此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...

  5. 服务器文档下载zip格式 SQL Server SQL分页查询 C&num;过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable&comma;ICollection&comma;IList接口问题 不吹不擂,你想要的Python面试都在这里了【315&plus;道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  6. ◆ 火狐浏览器去除JS方法:

    ◆ 火狐浏览器去除JS方法: 在火狐地址栏输入about:config   回车 在搜索地址栏中输入javascript.enabled 右键 当一行的中的,值由false变成trun,就OK了 . 

  7. ASP&period;NET中HttpApplication中ProcessRequest方法中运行的事件顺序;ASP&period;NET WebForm和MVC总体请求流程图

    ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序 1.BeginRequest  開始处理请求 2.AuthenticateRequest 授权验证请求 ...

  8. 【mybatis】service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据【事务的问题】

    问题描述: service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据 ...

  9. InvocationHandler中invoke方法中的第一个参数proxy的用途

    最近在研究Java的动态代理时对InvocationHandler中invoke方法中的第一个参数一直不理解它的用处,某度搜索也搜不出结果,最后终于在*上找到了答案. 这是原文 ...

随机推荐

  1. 【WEB前端】使用百度ECharts,绘制项目质量报表

    一.下载ECharts的js库 下载地址:http://echarts.baidu.com/download.html 由于我们对体积无要求,所以我们采用了完整版本,功能齐全,在项目中,我们只需要像普 ...

  2. Java&amp&semi;&period;Net虚拟机精简&lpar;GreenJVM&amp&semi;GreenDotNet发布&rpar; &period;

    精简JRE体积的小工具:http://blog.csdn.net/cping1982/archive/2008/09/02/2865198.aspx 项目地址:http://code.google.c ...

  3. PostgreSQL中使用外部表

    1. 安装file_fdw 需要先安装file_fdw,一般是进到PostgreSQL的源码包中的contrib/file_fdw目录下,执行: make make install 然后进入数据库中, ...

  4. 解决类型&OpenCurlyDoubleQuote;System&period;Web&period;UI&period;UpdatePanel”不具有名为&OpenCurlyDoubleQuote;Gridview”的公共属性&comma;

    类型“system.web.ui.updatepanel” 不具有名为“XXX”的公共属性,其实原因很简单.就是少了一个<ContentTemplate></ContentTempl ...

  5. Entity Framework 技术参考:http&colon;&sol;&sol;kb&period;cnblogs&period;com&sol;zt&sol;ef&sol;

    Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/

  6. 二&period;创建maven工程及下载需要的jar包

    1.使用Eclipse的Maven插件来创建一简单的Maven项目 步骤:打开新建项目对话框,选择Maven Project(File->New->Object->Maven-&gt ...

  7. LeetCode&lpar;52&rpar;-Remove Linked List Elements

    题目: Remove all elements from a linked list of integers that have value val. Example Given: 1 --> ...

  8. 【C语言】多项式加法(mooc第七周测试题)

    这个小题目吧我折磨的够呛,,主要在于特殊情况考虑不周,测试用例老是通不过.. 小结: 做法:用一个数组来存储多项式,用下标表示幂次数,数组元素值表示对应系数 输出特殊格式考虑:系数和幂次数为0,1,- ...

  9. Python作业之分页显示内容

    #coding:utf8 user_list =[] for i in range(1,302): tmp = "{'user':'alex-%s,'email':'alex%s@email ...

  10. 为什么90&percnt;的CTO 都做不好绩效管理

    ​ 十多年从业经历,从 2001 年开始带团队到现在,我几乎经历过所有的 IT 角色.2010 年,我随创始团队筹建国美在线至今,经历了从几百单到现在日均百万订单,从只有家电品类到现在全品类.金融.大 ...