addEventListener处理函数添加参数

事情的起因是因为被一个学生问到的,代码如下

var aDiv=oDiv.getElementsByTagName("div");
	for(var i=0;i<aDiv.length;i++){
		aDiv[i].addEventListener("mouseover",change(),false);
	}

问我为什么mouseover事件都没有触发,为什么直接执行了函数。我当时也蒙了一下,但是后来突然发现,addEventListener中的处理函数只需要放一个函数名就行了,这样写就以为这执行这个函数,因此,改写代码:

function change(obj){
			obj.style.transform="scale(0)";
		}
			
		var aDiv=oDiv.getElementsByTagName("div");
		for(var i=0;i<aDiv.length;i++){
			aDiv[i].addEventListener("mouseover",change,false);
		}
但是现在问题又来了,我们需要一个参数,而一个函数名是没办法穿参数的,所以这个时候就要用到bind方法

在EcmaScript5中扩展了叫bind的方法(IE6,7,8不支持),可以绑定参数。bind可接受的参数都分为两部分,且第一个参数都是作为执行时函数上下文中的this的对象。

再次改写:

var aDiv=oDiv.getElementsByTagName("div");
			for(var i=0;i<aDiv.length;i++){
				aDiv[i].addEventListener("mouseover",change.bind(aDiv[i],aDiv[i]),false);
			}
			
			function change(obj){
				obj.style.transform="scale(0)";
			}


搞定

`addEventListener` 函数是用于在 JavaScript 监听网页元素或全局窗口事件的一种常用方法。它可以接收三个参数:事件名称、事件处理函数以及一个可选的第三个参数,用来设置事件捕获阶段的行为(仅适用于某些浏览器)。这里列出了 `addEventListener` 可以监听的一些常见事件类型及其用途: ### 一、鼠标事件 1. **`click`**: 当用户单击一个元素时触发。 2. **`dblclick`**: 当用户双击一个元素时触发。 3. **`mousedown`**: 鼠标按键按下时触发。 4. **`mouseup`**: 鼠标按键释放时触发。 5. **`mousemove`**: 鼠标移动时触发。 6. **`mouseover`** 和 **`mouseout`**: 分别表示光标进入和离开元素时触发。 ### 二、键盘事件 1. **`keydown`**: 键盘上的键按下时触发。 2. **`keyup`**: 键盘上的键释放时触发。 3. **`keypress`**: 用户在键盘上输入字符时触发(在一些浏览器,这个事件并不总是比 `keydown` 更快)。 ### 三、页面加载及文档事件 1. **`load`**: 页面完全加载完成后触发。 2. **`unload`**: 浏览器窗口正在关闭前触发。 3. **`beforeunload`**: 浏览器窗口即将关闭前触发,允许开发者阻止浏览器的默认行为(例如,阻止页面退出前未保存数据)。 4. **`DOMContentLoaded`**: 当文档结构完全加载并解析完成时触发,但不会等待所有的资源加载完毕(如图片、样式表等)。 5. **`readystatechange`**: XMLHttpRequest 请求的状态发生变化时触发。 6. **`resize`**: 用户调整浏览器窗口大小时触发。 7. **`scroll`**: 当滚动条位置发生改变时触发。 ### 四、其他全局事件 1. **`focus`** 和 **`blur`**: 分别表示元素获得焦点和失去焦点时触发。 2. **`contextmenu`**: 用户右键点击元素时触发,通常用于打开上下文菜单。 使用 `addEventListener` 功能强大且灵活,可以根据具体的交互需求为网站或网页应用添加各种动态行为。请注意,为了兼容旧版浏览器,建议在实际项目结合使用 `removeEventListener` 函数来清除不必要的事件监听器,避免内存泄漏等问题。同时,合理选择合适的事件类型和时机加入监听器,可以提高应用性能并优化用户体验。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值