javascript事件处理程序(事件侦听器)

事件处理程序也叫事件侦听器,什么是事件处理程序?那首先,什么是事件?事件就是用户或者浏览器自身执行的某种动作,如:click、load等都是事件的名字。而响应时间的函数就叫做事件处理程序,如:onclick,onload

添加事件处理程序的方法

为元素添加事件处理程序有多种方法:

一、在元素上添加,如:
<input type="button" value="clickMe" onclick="alert(value)"/>  //这里用的是value而不是this.value,当然用this.value也是可以的,this指的是目标元素本身
复制代码

这种方法的优点在于他拓展作用域的方式,在函数内部可以直接访问document以及元素本身的属性。如下代码,点击按钮会弹出输入框中的值:

<form>
	<input type="text" name="userName"/>
	<input type="button" value="userName's value" onclick="alert(userName.value)"/> 
</form>
复制代码

缺点在于: 1、会有时差问题,因为很多时候侦听器要处理的并不是简单的一个语句,而是一个功能,如果点击时页面还没有加载完成点击时要执行的函数,那么就会报错。这样我们可以把他邓庄到一个try-catch块中来捕捉错误,如:

	<input type="button" value="userName's value" onclick="try{sth();}catch(ex){}"/>
复制代码

2、可能会有兼容问题 3、html与javascript紧密耦合,不利于维护。

二、为元素指定事件处理程序:
<form>
	<input type="text" name="userName" id="userName"/>
	<input type="button" value="clickMe" id="button" /> 
</form>
var btn = document.getElementById("button");
var userName = document.getElementById("userName");

btn.onclick = function(){
	alert(userName.value);  //userName's value  这时要想获取userName的value必须取得userName的引用
	alert(this.value);    //这里的this指的是当前点击的元素
}
btn.onclick = function(){	//如果为btn绑定多次click事件的话只识别最后一次
	alert(1);						
}
//btn.onclick = null    //取消注释之后将删除btn的click事件,即点击btn将不再有任何反应
复制代码

这种方法的优点在于1、绑定简单2、不会有浏览器兼容问题 缺点在于当需要操作的元素很多时,对DOM的操作太多,函数太多会占用内存,影响网站的性能

三、addEventListener():

addEvenetListener()接受三个参数:1、事件名,如click注意不是onclick 2、执行函数 3、true or false(true表示在事件捕获阶段调用,false表示在事件冒泡阶段调用)。特别说明:不建议在事件捕获阶段调用,也就是不建议使用true,除非特别需要,因为会有兼容问题

<input type="button" value="clickMe" id="button" /> 

var btn = document.getElementById("button");
btn.addEventListener('click',function(e){
	var target = e.target || e.srcElement;
	console.log(target);
},false);
btn.addEventListener('click',sth,false);     //用addEventListener()指定事件时可以指定多次
//btn.removeEventListener('click',sth,false);//removeEventListener()传入相同的参数可以解除绑定,注意:匿名函数是无法解绑的
复制代码

转载于:https://juejin.im/post/5c91ed80e51d4529c92d6446

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值