jQuery中阻止事件冒泡方式及其区别

Jquery提供了两种方式来阻止事件冒泡
方式一:event.stopPropagation();
$("#div1").mousedown(function(e){
        e.stopPropagation();
});
方式二:return false;
$("#div1").mousedown(function(e){
        return false;
});

但是这两种方法是有区别的。
return false不仅阻止了事件往上冒泡,而且阻止了事件本身。
e.stopProoagation()则只阻止事件往上冒泡,不阻止事件本身。


js的写法:
1>.停止冒泡的写法
//如果提供了事件对象,则这是一个非IE浏览器
if(e&&e.stopPropagation){
        //因此它支持W3C的stopPropagation()方法
        e.stopPropagation();
}else{
        //否则,我们需要使用IE的方式来取消事件冒泡
        window.event.cancelBubble=ture;
}
return false;

2>.阻止浏览器的默认行为
//如果提供了事件对象,则这是一个非IE浏览器
if(e&&e.preventDefault){
        //阻止默认浏览器动作(W3C)
        e.preventDefault();
}else

jquery的写法:
A.return false---在事件的处理中,可以阻止默认事件和冒泡事件
B.event.preventDefault()---在事件的处理中,可以阻止默认事件但是允许冒泡事件的发生。
C.event.stopPropagation()---在事件的处理中,可以阻止冒泡但是允许默认事件的发生。

prototype的写法:
Event.stop(event)

用法介绍:
事件发生后,浏览器通常首先触发事件发生元素上的事件处理程序,然后是它的父元素,父元素的父元素……依此类推,直到文档的根元素为止。这被称为是事件冒泡,是事件传播的最常见的方式。当处理好一个事件后,你可能想要停止事件的传播,不希望它继续冒泡。
当你的程序有机会处理事件时,如果这个事件有默认行为,同时浏览器也会处理它。例如,点击导航链接,将表单提交到服务器,在一个单行文本框中按下回车键等等。如果对这些事件你定义了自己的处理方式,可能会非常希望阻止相关默认行为。

事件捕获:
允许多个元素响应单击事件的一种策略叫做事件捕获。在事件捕获的过程中,事件首先会交给最外层的元素,接着再交给更具体的元素。
事件目标:纯javascript属性event.target
事件处理程序的变量event保存着事件对象。而event.target属性保存折发生事件的目标元素。这个属性DOM API中规定的,但是没有被所有浏览器实现。Jquery通过.target可以确定DOM中首先接收到事件的元素(即被实际单击的元素),而且,this应用的是处理事件的DOM元素。
$(document).ready(function(){
        $("sweitcher").click(function(event){
                if(event.target==this){
                        $("#switcher .button").toggleClass('hidden');
                }
        });
});
target事件属性
定义和用法:target事件属性可返回事件的目标结点(触发该事件的结点),如生成事件的元素,文档或窗口。
语法:
event.target

事件委托:
通俗的讲,事件就是onclick,onmouseover等就是事件,委托就是让别人来做,这个事件本来是加在某些元素上的,然而却加到别人身上来做,完成这个事件。
原理:利用冒泡的原理,把事件加到父级上,触发执行效果。
作用:
1.性能好
2.针对新创建的元素,直接可以拥有事件
事件源:
跟this作用一样(他不用看指向问题,谁操作的就是谁),event对象下的
使用情景:
1.为DOM中的很多元素绑定相同事件。
2.为DOM中尚不存在的元素绑定事件。
Jquery的事件委托
$(function(){
        $('#ul1,#ul2').on('click',function(){
                if(!$(this).attr('s')){
                        $(this).css('background','red');
                        $(this).attr('s',true);
                }else{
                        $(this).css('background','#fff');
                        $(this).removeAttr('s');
                }
        });
});
事件切换
hover(over,out)
一个模仿悬停事件的方法。
over:鼠标移到元素上要触发的函数
out:鼠标移出元素要触发的函数
toggle(fn,fn)
每次点击后,依次触发函数
如果点击了一个匹配的元素后,则执行指定的第一个事件处理函数;
当再次点击该元素时,会执行下一个事件处理函数;
如果有更多函数,则依次触发,直到最后一个,然后循环调用。

jquery事件对象
jquery同意了事件对象,当绑定事件处理函数时,会将jquery格式化后的事件对象作为唯一参数传入:
$("#div1").bind("click",{foo:"ooo"},function(e){
        alert(e.data.foo);
});
jquery事件对象的函数:
preventDefault();
isDefaultPrevented();
stopPropagation();
isPropagationStopped();
stopImmediatePropagation();
isImmediatePropagationStopped();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值