JavaScriptDOM(五)

一、什么是事件对象

当一个事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是event。只有有了事件event才会存在,它是系统自动创建的,不需要传递参数。

二、事件对象的使用

在标准浏览器中会将一个event对象直接传入到事件处理程序中,而早期版本的IE浏览器(IE 6~IE 8)中,仅能通过window.event才能获取事件对象。

 注意:因为在事件触发时就会产生事件对象,并且系统会以实参的形式传给事件处理函数。所以,在事件处理函数中需要用一个形参来接收事件对象event。

示例代码:

<button id="btn">获取event对象</button>
<script>
  var btn = document.getElementById('btn');
  btn.onclick = function(e) {
    var event = e || window.event;    // 获取事件对象的兼容处理
    console.log(event);
  };
</script>

在IE11的开发人员工具中,通过IE8兼容模式测试,效果如左图所示。在Chrome浏览器中的效果如右图所示:

 三、事件对象的常见属性和方法

在事件发生后,事件对象event中会包含一些所有事件都有的属性和方法。所有事件基本上都包括的常用的属性和方法如下表所示。

属性

说明

浏览器

e.target

返回触发事件的对象

标准浏览器

e.srcElement

返回触发事件的对象

非标准IE 6-IE 8使用

e.type

返回事件的类型

所有浏览器

e.stopPropagation()

阻止事件冒泡

标准浏览器

e.cancelBubble

阻止事件冒泡

非标准IE 6-IE 8使用

e.preventDefault()

阻止默认事件(默认行为)

标准浏览器

e.returnValue

阻止默认事件(默认行为)

非标准IE 6-IE 8使用

注意:表中的type属性是标准浏览器和早期版本IE浏览器的事件对象的公有属性,通过该属性可以获取发生事件的类型,如click、mouseover等(不带on)

1、对比e.target和this的区别

在事件处理函数中,e.target返回的是触发事件的对象,而this返回的是绑定事件的对象。因为e.target支持IE9以上,所以编写以下代码,处理兼容性问题。

2、默认阻止行为

在实际开发中,为了使程序更加严谨,想要确定含有默认行为的标签符合要求后,才能执行默认行为时,可利用事件对象的preventDefault()方法和returnValue属性,禁止所有浏览器执行元素的默认行为。需要注意的是,只有事件对象的cancelable属性设置为true,才可以使用preventDefault()方法取消其默认行为。

 案例演示:下面我们以禁用<a>标签的链接为例进行演示

<a href="http://www.baidu.com">百度</a>
<script>
  var a = document.querySelector('a'); // 获取a链接对象
  a.addEventListener('click', function (e) { // 注册单击事件
    e.preventDefault();      // DOM标准写法,早期版本浏览器不支持
  });
  // 推荐使用传统的注册方式
  a.onclick = function (e) {
    e.preventDefault();	// 标准浏览器使用e.preventDefault()方法
    e.returnValue;    // 早期版本浏览器(IE6、7、8)使用returnValue属  }
</script>

3、阻止事件冒泡

可以利用事件对象调用stopPropagation()方法和设置cancelBubble属性,实现禁止所有浏览器的事件冒泡行为。

if (window.event) {		// 早期版本的浏览器
  window.event.cancelBubble = true;
} else {				// 标准浏览器
  e.stopPropagation();
}

4、事件委托

事件委托的原理是,不给每个子节点单独设置事件监听器,而是把事件监听器设置在其父节点上,让其利用事件冒泡的原理影响到每个子节点。 简而言之,就是不给子元素注册事件,给父元素注册事件,让处理代码在父元素的事件中执行。 这样做的的优点在于,只操作了一次DOM ,提高了程序的性能。

案例演示:演示事件委托的使用。

<ul>
  <li>我是第 1 个li</li>
  // …此处省略多个<li></li>标签
</ul>
<script>
  var ul = document.querySelector('ul');
  ul.addEventListener('click', function (e) {
    e.target.style.backgroundColor = 'pink';
  });
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值