jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法_jquery

 首先,大家都知道,jQuery事件触发时有2种机制,一种是事件委托,另一种是事件冒泡(IE情况暂时不考虑)。拿click事件做例子,先附上一段代码:

html:

<body>
<div id="box">
<p id="btn">我是按钮</p>
</div>
</body>
style:
.hid{
 display:none;
}

script:

$('#box').click(function(){
 $(‘#btn').toggleClass(‘hid');
})
$('#btn').click(function(){
 alert('btn');
})

这段代码的本意是,当我点击#btn的时候,我要alert出来“btn”字符串,而当我点击#box的时候,我要把#btn隐藏,但是,在实际执行的时候,当我点击btn的时候,他是会先执行btn的事件,继而执行box的事件,也就是先alert,再隐藏。与我们所想有所出入,那到底要怎么解决这个问题呢,这里就要想到事件冒泡这个机制,因为当我点击btn的时候,事件会向上冒泡到父元素,直至document对象。

1.7(没记错的话)之后的jQuery版本,提供了.on()事件,用来处理绑定元素的事件,这里我们可以用.on()事件,以及stopPropagation()方法来阻止事件冒泡:

$('#box').on('click','#btn',function(e){
 e.stopPropagation();
 alert(‘btn');
})
$('#box').click(function(){
 $(‘#btn').toggleClass(‘hid');
})

这里我先用on绑定了#btn的事件,使得在点击到btn按钮的时候,alert('btn'),但是因为我 e.stopPropagation()阻止了事件冒泡,因此,就不会触发toggleClas事件;而此时我点击#box的时候,就是正常的toggleClass事件被触发;

这里思考了一下,如果不用.on()该怎么解决,类似于原生js中,用addEventListener监听点击的target,代码也不复杂:

$('#box‘).click(function(e) {
 if (e.target == this) {
  $(‘#btn').toggleClass(‘hid');
 }
})
$(‘#btn').click(function() {
 alert(‘btn');
})

这样子,就能达到阻止事件冒泡的样子了。

当然,事件冒泡也并非都是副作用,就是我们要讲的另一种,那就是事件委托,事件委托就是建立在事件冒泡的基础上的,比如上面那个例子,你可以假设#btn和#box之间有很多元素,当我想要点击最里层的#btn的时候,想要触发他对应的事件,那么,就可以通过点击它的外围元素,然后判断点击的是否是目标元素,也就是btn,如果是,那么触发btn的事件,其实就是上面.on()的这个例子,可以改写成:

$('body').on('click','#btn',function(e){
 alert(‘btn');
})

把btn的事件委托给点击body来处理。

最后再仔细的分析一下,其实事件委托和事件冒泡,从逻辑上来思考无非就是2个相反的方向在执行。事件委托其实就是事件捕获过程,可以看成是从外到内捕获的过程;而事件冒泡就是从里到外冒泡的过程。

jquery的冒泡事件的阻止与允许(三种实现方法)

冒泡或默认的事件发生,在某些时候是不需要的,在此就需要一些可以阻止冒泡和默认的事件的方法,本文介绍三种方法做到不同程度的阻止,感兴趣的朋友可以了解下,或许对你了解冒泡事件有所帮助

有时我们不希望冒泡或默认的事件发生,这样就需要一些jquery的的方法阻止冒泡和默认的事件了。
可以通过以下三种方法做到不同程度的阻止。

A:return false --->In event handler ,prevents default behavior and event bubbing 。

return false 在事件的处理中,可以阻止默认事件和冒泡事件。

B:event.preventDefault()---> In event handler ,prevent default event (allows bubbling) 。

event.preventDefault()在事件的处理中,可以阻止默认事件但是允许冒泡事件的发生。

C:event.stopPropagation()---> In event handler ,prevent bubbling (allows default behavior).。

event.stopPropagation()在事件的处理中,可以阻止冒泡但是允许默认事件的发生。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jquery事件委托
, jquery事件冒泡
, jquery阻止冒泡
jquery允许冒泡
js事件委托的阻止冒泡、js阻止事件冒泡、阻止事件冒泡、jquery阻止事件冒泡、阻止冒泡,以便于您获取更多的相关知识。

时间: 2024-11-03 12:16:48

jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法_jquery的相关文章

jquery的冒泡事件的阻止与允许(三种实现方法)_jquery

有时我们不希望冒泡或默认的事件发生,这样就需要一些jQuery的的方法阻止冒泡和默认的事件了.可以通过以下三种方法做到不同程度的阻止. A:return false --->In event handler ,prevents default behavior and event bubbing . return false 在事件的处理中,可以阻止默认事件和冒泡事件. B:event.preventDefault()---> In event handler ,prevent default

Jquery网页出现的乱码问题的三种解决方法_jquery

1.当导入Jquery代码时:网页中其它文字正常,而Jquery代码显示异常.解决方案: 将Jquery代码用文本(.txt)或word打开,再另存为并改变其编码方式(通常改为utf-8或gb2312). 2.当要改ASP.NET中整个网站的编码问题时.在web.config文件中修改< globalization requestEncoding="gb2312" responseEncoding="gb2312"culture="zh-CN&quo

jQuery表格行换色的三种实现方法_jquery

复制代码 代码如下: $('tr').hover(function(event) { $(this)[ (event.type == 'mouseenter' ? 'add' : 'remove') + 'Class' ]('test'); //test是样式 }); $('tr').hover(function(event) { $(this).toggleClass('test'); //test是样式 }); $('tr').hover(function(){ $(this).addCla

jQuery让控件左右移动的三种实现方法_jquery

方法一 [注]需把控件的 CSS 的 position 属性设置为 relative 或 absolute. 复制代码 代码如下: <script type="text/javascript" src="js/jquery-1.8.0.js"></script> <script language="javascript"> $(document).ready(function(){ $("#right

jquery与js函数冲突的两种解决方法_jquery

如果您还有别的要求,想继续使用原先的$(),同时还需要与别的类库不冲突的话,还有两种解决方法 其一: 复制代码 代码如下: jQuery.noConflict(); jQuery(function($) { $("p").click(function() //在函数内继续可以使用jquery类库的$()方法 { alert($(this).text()); }) }) var JsCOM_cr = $("cr"); // 在函数外面,照样可以使用JsCOM.js的$

Jquery时间轴特效(三种不同类型)_jquery

jquery三种不同类型时间轴切换展示幻灯特效,先给大家展示效果图,喜欢的朋友可以下载源码哦. 查看效果       源码下载 文件引用: <script type="text/javascript" src="jquery.js"></script> <script src="jquery.timelinr-0.9.4.js" type="text/javascript"></scr

按钮接受回车事件的三种实现方法_javascript技巧

方法一: 复制代码 代码如下: <script type="text/javascript" event="onkeydown" for="document"> if(event.keyCode==13) { var button=document.all("<%=ButtonAddorUpdate.ClientID %>"); button.focus(); button.click(); } <

jquery如何改变html标签的样式(两种实现方法)_jquery

对于如何修饰html标签,这对于js来说,可以通过setAttribute来设置标签的属性,通过getAttribute来得到标签的属性,而在jq中当然也可以实现类似的功能,方法上肯定比js要简化多了. 一 通过修改标签属性来改变它的样式 js设置和获取标签的属性 复制代码 代码如下: <script type="text/javascript"> window.onload = function () { var attr = document.getElementByI

Jquery网页出现的乱码问题的三种解决方法

1.当导入Jquery代码时:网页中其它文字正常,而Jquery代码显示异常. 解决方案: 将Jquery代码用文本(.txt)或word打开,再另存为并改变其编码方式(通常改为utf-8或gb2312). 2.当要改ASP.NET中整个网站的编码问题时. 在web.config文件中修改< globalization requestEncoding="gb2312" responseEncoding="gb2312"culture="zh-CN&q