细说 jQuery 事件篇(四) 改变事件过程
在 《细说 jquery 事件篇(三) – 事件传播》 中提到了事件冒泡可能造成的弊端,当时举了 mouseout 的例子,对于 mouseout 这个特殊情况,我们可以用 hover 方法来解决,但是对于 hover 方法无法解决的情形,我们又应该如何处理呢?
为此,我们必须通过访问事件对象来改变事件过程。
事件对象是一种 DOM 结构,它会在元素获得处理事件的机会时传递给调用的事件处理程序。这个对象中包含着与事件有关的信息。
事件对象 event 的 target 属性指的是事件目标,它将保存发生事件的目标元素。
首先,我们举一个 hover 无法处理的例子:
样式为:
div { width: 200px; height: 200px; border: 1px solid #ccc; }
我们的需求是仅仅当点击 div 区域时添加一个背景色,但是点击 a 标签时并不改变背景色。
添加样式为:
jQuery 代码为:
$('div').click(function() { $('div').addClass('blueBg'); });此时点击 div 后:

但由于事件冒泡的存在,当我们点击 a 标签跳出页面后,发现 div 的背景色也被改变。所以,接下来我们就要想办法改变事件过程来阻止这个行为。
阻止事件冒泡利用事件对象的 .stopPropagation() 方法可以阻止事件冒泡。下面我们来阻止 a 标签向上冒泡。修改 jQuery 代码如下:
$('a').click(function(event) { event.stopPropagation(); }); $('div').click(function(event) { $('div').addClass('blueBg'); });此时,再点击 a 标签将不会改变 div 的背景色。
但是根据 jQuery 文档的说明,stopPropagation 方法对 live 和 delegate 绑定的事件是不支持的。
如果此时我们还希望能阻止 a 标签的默认行为,也就是打开一个页面的行为,这里我们需要用到事件对象的 .preventDefault() 方法。
$('a').click(function(event) { event.preventDefault(); event.stopPropagation(); }); $('div').click(function(event) { $('div').addClass('blueBg'); });此时,点击 a 标签不仅不会改变 div 的背景色,也不会打开新的页面,也就是说默认行为被阻止。
事件委托曾经写过一篇介绍事件委托的博文 – 《Javascript – 事件委托是怎么工作的?》。这里就不详细写了,但是 jQuery 提供了专门的方法来实现事件委托,就是利用 .on() 方法。
对于之前博文的例子:
利于 jQuery 的 on 方法可以简写为:
<ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> <li>Item 4</li> <li>Item 5</li> <li>Item 6</li> </ul> <script type="text/javascript"> $(function() { $('#parent-list').on('click', 'li', function(e) { console.log("List item ",e.target.id," was clicked!"); }) }); </script> 参考相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jq/jc/7428.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
PHP识别相片是否是颠倒的
时间:2020-12-28
-
python编程有哪些ide
时间:2020-12-28
-
python开发工程师是做什么
时间:2020-12-28
-
php构造函数的作用
时间:2020-12-28
-
php怎么跟数据库连接
时间:2020-12-28
-
php实现顺序线性表
时间:2020-12-28
-
Python多重继承中的菱形继
时间:2020-12-28
-
php中break的作用
时间:2020-12-28
热门文章
-
php中常用的正则表达式使用方法
时间:2020-12-25
-
asp与php区别是什么?
时间:2020-12-27
-
PHP识别相片是否是颠倒的,并且重新摆正
时间:2020-12-28
-
Yii授权之基于角色的存取控制 (RBAC)
时间:2020-12-23
-
php的一键安装包有哪些 php环境搭建
时间:2020-12-19
-
php实现对图片对称加解密(适用身份证加
时间:2020-12-25
-
php如何理解面向对象
时间:2020-12-28
-
超详细分析php docker的原理及作用
时间:2020-12-27
-
Python控制Excel实现自动化办公
时间:2020-12-23
-
session的作用是什么
时间:2020-12-25
