jQuery冒泡问题

jQuery表单事件之blur与focus事件

我们学过了表单处理事件focusin事件与focusout事件,同样用于处理表单焦点的事件还有blur与focus事件

它们之间的本质区别:

是否支持冒泡处理

举个简单的例子

<div>
  <input type="text" />
</div>

其中input元素可以触发focus()事件

div是input的父元素,当它包含的元素input触发了focus事件时,它就产生了focusin()事件。

focus()在元素本身产生,focusin()在元素包含的元素中产生

blur与focusout也亦是如此

具体参考下案例,给出来的区别

 1 <!DOCTYPE html>
 2 <html>
 3
 4 <head>
 5     <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 6     <title></title>
 7     <style>
 8     .left div,
 9     .right div {
10         width: 500px;
11         height: 50px;
12         padding: 5px;
13         margin: 5px;
14         float: left;
15         border: 1px solid #ccc;
16     }
17
18     .left div {
19         background: #bbffaa;
20     }
21
22     .right div {
23         background: yellow;
24     }
25     </style>
26     <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
27 </head>
28
29 <body>
30     <h4>.focusin与blur</h4>
31     <div class="left">
32         <div class="aaron">
33             点击触发焦点(无反应):
34             <input type="text" />
35         </div>
36         <div class="aaron1">
37             点击触发焦点并冒泡:
38             <input type="text" />
39         </div>
40     </div>
41     <script type="text/javascript">
42     $(".aaron").focus(function() {
43         $(this).css(‘border‘, ‘2px solid red‘)
44     })
45     $(".aaron1").focusin(function() {
46         $(this).find(‘input‘).val(‘冒泡捕获了focusin事件‘)
47     })
48     </script>
49
50
51     <h4>.focusout与blur</h4>
52     <div class="right">
53         <div class="aaron3">
54             点击触发失去焦点(无反应):
55             <input type="text" />
56         </div>
57         <div class="aaron4">
58             点击触发失去焦点并冒泡:
59             <input type="text" />
60         </div>
61     </div>
62     <script type="text/javascript">
63     $(".aaron3").blur(function() {
64         $(this).css(‘border‘, ‘2px solid red‘)
65     })
66     $(".aaron4").focusout(function() {
67         $(this).find(‘input‘).val(‘冒泡捕获了focusout事件‘)
68     })
69
70     </script>
71
72 </body>
73
74 </html>

解释1:

你们看focus和blur事件都绑到了div上,你点击input或者点完移开失去焦点当然没反应了,因为input没有绑定事件啊。
而focusin和focuout也绑在div上,为啥有反应呢?
因为后者在你点input的时候会一级一级的往上面查父元素,如果父元素有事件就执行了,所以你看到了效果。这叫事件冒泡。
为啥前者不行呢?因为前者不支持事件冒泡。

解释2:

这里的例子有点绕,总的来说就是从效果上来说,都是在获取或失去焦点时产生事件,并可以绑定处理函数。
区别就在于focus和blur只能在input之类的表格元素本身上起效,当在他的父级元素上绑focus和blur事件时,因为它俩不冒泡,所以在外部的绑定其实是没有效果的。
而focusin和focusout可以冒泡,所以就算是在父级绑定的这两个事件,只要是内部元素触发了获得和失去焦点的事件,一样可以冒泡出来,让父级元素绑定的事件捕获到,从而执行命令。

时间: 2024-11-02 23:28:06

jQuery冒泡问题的相关文章

jquery冒泡及阻止

javascript, jquery的事件中都存在事件冒泡和事件捕获的问题,下面将两种问题及其解决方案做详细总结. 事件冒泡是一个从子节点向祖先节点冒泡的过程: 事件捕获刚好相反,是从祖先节点到子节点的过程. 给一个jquery点击事件的例子: 代码如下: 复制代码代码如下: <!DOCTYPE html> <meta charset="utf-8"> <title>test</title> <head> <script

jQuery免费资料

 JQvery免豆.pdf jQuery实战之仿flash跳动的按钮效果[源码]http://down.51cto.com/data/188600JQuery 1.4.2 手册简体中文版http://down.51cto.com/data/124390jQuery权威指南pdfhttp://down.51cto.com/data/317525asp.net mvc中很酷的jquery验证插件[源码]http://down.51cto.com/data/187446jQuery中文教程及汉化版ht

点击tr实现选择checkbox功能,点击checkobx的时候阻止冒泡事件, jquery给checkbox添加checked属性或去掉checked属性不能使checkobx改变状态

给tr添加点击事件,使用find方法查找tr下的所有层级的元素,children只查找下一层级的元素,所以使用find.find的返回值为jquery对象,在这个项目中不知道为什么使用jquery给checkbox添加checked属性或去掉checked属性不能使checkobx改变状态,所以我就把jquery对象转换为DOM对象,怎么转呢?jquery对象[0]或者get(0)就转换成DOM对象,然后直接.checked返回true或false就可以判断checkbox是否选中了.然后判断状

jQuery[补1] - 事件冒泡和阻止冒泡

假设网页上有两个元素,其中一个元素嵌套在另一个元素中,并且都被绑定了 click 事件,同时 body 元素上也绑定了 click 事件. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="conten

jQuery中的事件冒泡

1.什么是冒泡 eg: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>事件冒泡</title> <script src="

jQuery中的冒泡事件和阻止冒泡

jQuery代码 <script type="text/javascript"> $(function () { $("#p1").click(function () { alert("p1被点了"); }); $("#td1").click(function (e) { alert("td1被点了"); e.stopPropagation() }); //阻止冒泡 $("#tr1&q

jquery 事件冒泡的介绍以及如何阻止事件冒泡

原文地址:http://www.jb51.net/article/32792.htm 什么是JS事件冒泡? 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window). 如何来阻止Jquery事件冒泡? 通过一

JavaScript和JQuery中的事件\委托链\事件冒泡\事件捕获,兼容所有浏览器

有做过北大青鸟培训讲师经验的我,如今在一家公司做技术部经理的职位,发现有很多程序员的基本功相当糟糕,在组织企业内部培训时讲解了一些案例,总结了一些经典代码,希望对自己和有需要的人提供一些帮助吧: JavaScript版本: DOM0事件不支持委托链 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="C

jQuery事件对象的作用(利用冒泡事件优化)

事件中的Event对象容易被初学者忽略掉,可能大多时候初学者不知道怎么去用它,但有些时候它还是非常有用的 一个标准的"click"点击事件 $(elem).on("click",function(event){ event //事件对象 }) 在不同浏览器之间事件对象的获取, 以及事件对象的属性都有差异.jQuery根据 W3C 标准规范了事件对象,所以在jQuery事件回调方法中获取到的事件对象是经过兼容后处理过的一个标准的跨浏览器对象 这里不在千篇一律的说方法的