JS--JavaScript使用event对象、event对象属性、方法和事件委托

使用event对象

event对象由事件自动创建,代表事件的状态,如事件发生的源节点,键盘按键的响应状态,鼠标指针的移动位置,鼠标按键的响应状态等信息。event对象的属性提供了有关事件的细节,其方法可以控制事件的传播。

2级 DOM Events 规范定义了一个标准的事件模型,它被除了IE怪异模式以外的所有现代浏览器所实现,而IE定义了专用的、不兼容的模型。

  • 在DOM事件模型中,event对象被传递给事件处理函数,但是在IE事件模型中,它被存储在window对象的event属性中
  • 在DOM事件模型中,Event类型的各种子接口定义了额外的属性,它们提供了与特定事件类型相关的细节:在IE事件模型中,只有一种类型的event对象,它用于所有类型的事件。

DOM事件模型中event对象属性:

属性说明
bubbles返回布尔值,指示事件是否是冒泡事件类型。如果事件是冒泡类型,则返回true,否则返回false
cancelable返回布尔值,指示事件是否可以取消的默认动作。如果使用preventDefault()方法可以取消与事件关联的默认动作,则返回值为true,否则为false
currentTarget返回触发事件的当前节点,即当前处理该事件的元素、文档或窗口。在捕获和冒泡阶段,该属性是非常有用的,因为在这两个阶段,它不同于target属性
eventPhase返回事件传播的当前阶段,包括捕获阶段(1)、目标事件阶段(2)和冒泡阶段(3)
target返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口
timeStamp返回事件生成的日期和时间
type返回当前event对象表示的事件的名称。如“submit”、“load”或“click”

DOM事件模型中event对象方法:

方法说明
initEvent()初始化新创建的event对象的属性
preventDefault()通知浏览器不要执行与事件关联的默认动作
stopPropagation()终止事件在传播过程的捕获、目标处理或冒泡姐u但进一步传播。调用该方法后,该节点上处理该事件的处理函数将被调用,但事件不再被分派到其他节点

示例:禁止超链接跳转

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<a href="https://www.baidu.com/" id="a1">禁止超链接跳转</a>
		<script>
			document.getElementById("a1").onclick = function(e){
				e = e || window.event;//兼容处理
				var target = e.target || e.srcElement;
				if(target.nodeName !== 'A'){//仅针对超链接起作用
					return;
				}
				if(typeof e.preventDefault === 'function'){
					e.preventDefault();//禁止默认行为
					e.stopPropagation();//禁止事件传播
				}else{
					e.returnValue = false;
					e.cancelable = true;
				}
			}
		</script>
	</body>
</html>
事件委托

事件委托(delegate),也称为事件托管或事件代理,简单描述就是把目标节点的事件绑定到祖先节点上。这种简单而优雅的事件注册方式基于:事件传播过程中,逐层冒泡总能被祖先节点元素捕获

示例:利用事件传播机制,在列表ul元素上绑定click事件,当事件传播到父节点ul上时,捕获click事件,然后再事件处理函数中检测当前事件响应节点类型,如果是li元素,则进一步执行下面代码,否则跳出事件处理函数,结束响应。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<button id="btn">添加列表项目</button>
		<ul id="list">
			<li>列表项目1</li>
			<li>列表项目2</li>
			<li>列表项目3</li>
		</ul>
		<script>
			var ul = document.getElementById("list");
			ul.addEventListener('click', function(e){
				var e = e || window.event;
				var target = e.target || e.srcElement;
				if(e.target && e.target.nodeName.toUpperCase() == "LI"){
					alert(e.target.innerHTML);
				}
			}, false);
			var i = 4;
			var btn = document.getElementById("btn");
			btn.addEventListener("click", function(){
				var li = document.createElement("li");
				li.innerHTML = "列表项目" + i++;
				ul.appendChild(li);
			});
		</script>
	</body>
</html>

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值