探究绑定事件的this指向以及event传参的小问题
this指向
直接上代码,凑合着看
<input type="button" onclick="page()" value="点我"></input>
<input type="button" value="点我2号" id="btn"/>
<input type="button" value="点我3号" id="btn2"/>
<input type="button" value="点我测试addEventListener传参" id="btn-parem"/>
<input type="button" value="我是ie终结者,赶紧点我" id="ie-end">
<script>
//该函数用于测试页面上的this对象
function page(){
console.log(this==window)
// true 说明页面上绑定的事件的作用域都是window,这样很不好,因为有时候我们是希望我们的this值就是当前的对象而不是window
}
var btn=document.getElementById("btn");
btn.onclick=function(){
console.log(this);
// 这个时候就正常了,输出的this指向的是当前的input对象
};
var btn2=document.getElementById("btn2");
function btnClick(){
console.log(this)
// 很明显这也是正常的
}
btn2.addEventListener("click",btnClick,false);
// 关于addEventListener我们再扯一个,怎么往addEventListener里面的函数传参
var btnParem=document.getElementById("btn-parem")
function pare(a,b){
console.log(a+b)
}
// btnParem.addEventListener("click",pare(1,2),false)
// 亲,很明显这种写法是不行的,因为我还没点击事件就已经自动执行了
btnParem.addEventListener("click",function(){pare(1,9)},false)
// 注意,关于attachEvent该事件是ie特有的绑定事件方式,同时该事件以及渐渐的被抛弃,在最新的ie edge中已经没有了该事件转而支持addEventListener
// 同时,在ie 9 10中也已经支持addEventListener事件
var ieEnd=document.getElementById("ie-end")
function ending(){
console.log(this)
// 在支持该事件的浏览器下输出window
}
ieEnd.attachEvent("onclick",ending)
</script>
怎么向addEventListener中传入event对象
<input type="button" id="btn" value="测试"/>
var btn=$("#btn");
btn.onclick=function(e){
console.log(e);
}
这样的写法是正常的,可以正确的传入e,换成addEventListener的情况就是这样写
function func(e){
console.log(e);
}
btn.addEventListener("click",func,false)
此时可以看到,我们并没有显式的向func中传入参数e。那么当我们想传参的时候应该怎么写呢
function func(e,a,b){
console.log(e);
console.log(a+b);
}
btn.addEventListener("click",function(e){
func(e,1,2);
},false);
这就是正确的写法,使用一个匿名函数包住我们的func,同时在匿名函数中传入参数e
探究绑定事件的this指向以及event传参的小问题的更多相关文章
- 使用call、apply和bind解决js中烦人的this,事件绑定时的this和传参问题
1.什么是this 在JavaScript中this可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式,this 绑定的对象即函数执行的上下文环境(context). 为了帮助理解,让我 ...
- 使用addEventListener绑定事件是关于this和event记录
DOM元素使用addEventListener绑定事件的时候经常会碰到想把当前作用域传到函数内部,可以使用以下两种放下: var bindAsEventListener=function (objec ...
- html 中绑定事件 this的指向
var m=function(){ alert(2); } var obj={ A:function(){ }, m:function(){ ...
- jQuery 为动态添加的元素绑定事件
在使用jquery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件.像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是 ...
- jQuery绑定事件的on()
jQuery绑定事件 语法:$(selector).on(event,childselector,function(){}); 可以为自身的加事件(一个或多个) 也可以为其子元素加事件(一个或多个) ...
- Chrome插件Visual Event查看Dom元素绑定事件的利器
找这工具找了好久,统一找着了,开发人员不可多得的好东东,收藏做一下分享. 用Chrome插件Visual Event查看Dom绑定的事件 Visual Event简介 Visual Event是一个开 ...
- jquery 绑定事件 获取方式 --------------data event 获取
//绑定事件 bind event $("body").on("click",function(){ console.log("in") } ...
- 冒泡,setinterval,背景图的div绑定事件,匿名函数问题探究
1.会冒泡到兄弟元素么? $(function(){ $("#a").click(function(){alert("a")}) $("#b" ...
- JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数
下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持: function addEvent(obj,type,handle){ try{ // Chrome.FireFox.Opera.Safa ...
随机推荐
- Ext JS学习第五天 Ext_window组件(一)
此文来记录学习笔记 •第一个组件:Ext.window.Window.对于组件,也就是Ext最吸引开发者的地方,那么我们要真正的使用Ext的组件,首先必须学会阅读API文档. –xtype:组件的别名 ...
- Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型
Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型 在这一节中,你将添加用于管理数据库中电影的类.这些类是ASP.NET MVC应用程序的模型部分. 你将使用.NET Framewo ...
- 裸机离奇事件:Freescale usb 有关fault
裸机离奇事件:Freescale usbucosiiFreescale\KSDK_1.2.0\examples\twrk65f180m\demo_apps\usb\host\cdc\cdc_seria ...
- Null指针
C++ Null 指针 C++ 指针 C++ 指针 在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯.赋为 NULL 值的指针被称为空指针. NULL ...
- 基础算法-查找:线性索引查找(II)
索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找. 索引查找的过程是: 1)首先根据给定的索引值K1,在索引表上查找出索引值等于K1的索引项,以确定对应子表在主表中的开始位置和长度. 2 ...
- BZOJ 1600: [Usaco2008 Oct]建造栅栏
1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec Memory Limit: 64 MB Description 勤奋的Farmer John想要建造一个四面的 ...
- codility上的练习 (1)
codility上面添加了教程.目前只有lesson 1,讲复杂度的……里面有几个题, 目前感觉题库的题简单. tasks: Frog-Jmp: 一只青蛙,要从X跳到Y或者大于等于Y的地方,每次跳的距 ...
- 物流追踪 - -GPS和GPRS应用
源码1: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<termios.h ...
- 如何提高banner设计含量--网上的一篇文章--感悟
"修改": 本质上是改什么?改大小?图片?文字?颜色? 老板说:修改本质上是提高“设计含量”.检测一个作品设计含量的高低,可以将作品中每一个设计元素进行分析,看它的“属性”与“操作 ...
- Windows 下统计行数的命令
大家都知道在Linux下统计文本行数能够用wc -l 命令.比如: -bash-3.2$ cat pif_install.log | wc -l 712 但在Windows下怎样统计输出文 ...