js阻止冒泡及jquery阻止事件冒泡示例介绍

js阻止冒泡
在阻止冒泡的过程中,W3C和IE采用的不同的方法,那么我们必须做以下兼容。

复制代码 代码如下:

function stopPro(evt){
var e = evt || window.event;
//returnValue如果设置了该属性,它的值比事件句柄的返回值优先级高。把这个属性设置为 fasle,
//可以取消发生事件的源元素的默认动作。
//window.event?e.returnValue = false:e.preventDefault();
window.event?e.cancelBubble=true:e.stopPropagation();
}

或者:

复制代码 代码如下:

function cancelBubble(e) {
var evt = e ? e : window.event;
if (evt.stopPropagation) {
//W3C
evt.stopPropagation();
}
else {
//IE
evt.cancelBubble = true;
}

JQuery 提供了两种方式来阻止事件冒泡。
方式一:event.stopPropagation();

复制代码 代码如下:

$("#div1").mousedown(function(event){
event.stopPropagation();
});

方式二:return false;

复制代码 代码如下:

$("#div1").mousedown(function(event){
return false;
});

Jquery阻止默认动作即通知浏览器不要执行与事件关联的默认动作。
例如:

复制代码 代码如下:

$("a").click(function(event){
event.preventDefault(); //阻止默认动作即该链接不会跳转。
alert(4);//但是这个还会弹出
event.stopPropagation();//阻止冒泡事件,上级的单击事件不会被调用
return false;//不仅阻止了事件往上冒泡,而且阻止了事件本身
});

但是这两种方式是有区别的。return false 不仅阻止了事件往上冒泡,而且阻止了事件本身。event.stopPropagation() 则只阻止事件往上冒泡,不阻止事件本身。
场景应用:Google 和 百度的联想框,当弹出下拉列表,用户在下拉列表区域按下鼠标时需要让光标仍然保持在文本输入框。
Jquery案例:

复制代码 代码如下:

<script src="js/jquery-1.4.3.js"></script>
<script type="text/javascript">
$(function(){
$("#aa").click(function(event){
alert("aa");
event.preventDefault();
event.stopPropagation();
alert(3);
});
$("#ee").click(function(){
alert("ee");
});
$("a").click(function(event){
event.preventDefault();
alert(4);
event.stopPropagation();
return false;
});
});
</script>
</head>
<body>
<div id="ee">
aaaaaaa
<input id="aa" type="button" value="test" />
<a href="http://baidu.com">baidu.com</a>
</div>
</body>

js案例:

复制代码 代码如下:

function tt(){
alert("div");
}
function ttt(){
var e = arguments.callee.caller.arguments[0] || window.event;
window.event?e.returnValue = false:e.preventDefault();
alert(3);
window.event?e.cancelBubble:e.stopPropagation();
alert(4);
}
</script>
</head>
<body>
<div onclick = "tt();">
ccccc
<a href="http://baidu.com" onclick="ttt();">baidu.com</a>
</div>

时间: 2024-12-28 12:07:05

js阻止冒泡及jquery阻止事件冒泡示例介绍的相关文章

jQuery 取消事件冒泡 阻止后续内容执行 闭包函数 (学习笔记)

1.取消事件冒泡 <title>取消事件冒泡</title> <style> div { border:solid 1px black; } </style> <script src="js/jquery-3.1.1.js"></script> <script> $(function () { $("#big").click(function () { alert("点了大

恶补jquery(四)jquery中事件--冒泡

事件 当我们在打开一个页面的时候,浏览器会对页面进行解释执行,这实际上是通过执行事件来驱动的,在页面加载事件时,执行Load()事件,是这个事件实现浏览器解释执行代码的过程. 事件机制 事件中的冒泡现象 冒泡现象说的是事件执行顺序,当一个对象上触发了一个事件,如果没有定义此事件的处理程序或者事件返回true,那么这个事件就会向这个对象的父级对象传播,从里到外,直到他被处理(父级对象所有同类事件都被激活),或者它到达了对象层次的顶层(即document对象). 通俗的讲:假把设一杯水分成不同颜色的

jquery取消事件冒泡的三种方法(推荐)

1.通过返回false来取消默认的行为并阻止事件起泡. jQuery 代码: ? 1 2 3 4 5 6 7 8 9 10 11 $("form").bind( "submit", function() { return false; } ); 2.通过使用 preventDefault() 方法只取消默认的行为. jQuery 代码: ? 1 2 3 4 5 6 7 8 9 $("form").bind( "submit",

JQuery之事件冒泡

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

jQuery方式事件冒泡的2个方法

方式1:通过  event.stopPropagation(); $("div").click(function (event) { slide.call(this); event.stopPropagation();//仅仅是阻止了事件冒泡,本质来讲这个方法是执行了的. }); 方式2:通过 return false; $("div").click(function () { slide.call(this); return false;//通过阻断此方法运行的方

关于什么是事件冒泡和如何取消事件冒泡的讨论!

在学习jQuery的过程中我们肯定会碰到这样一个问题,那就是事件冒泡,那么,何为事件冒泡呢? 事件冒泡通俗点讲就是,当你的子元素和父元素注册了同一个事件的时候,当你激活子元素的时候,父元素也会跟着被激活, 显然,这并不是我们所需要的结果!所以我们就要想办法取消事件冒泡 具体实例如下 <body> <div id="mybigdiv"> 我是大div <div id="myid">我是小div</div> </di

阻止网页内部滚动条mousewheel事件冒泡

利用鼠标滚轮对网页内部无素滚动条触发滚动事件,当滚动条到达元素顶部或底部时不触发浏览器窗口的滚动事件. 通过调用以下函数实现: function preventScroll(id){ var _this = document.getElementById(id); if(navigator.userAgent.indexOf("Firefox")>0){ _this.addEventListener('DOMMouseScroll',function(e){ _this.scro

关于JQuery的事件冒泡处理

最近在写前端脚本的时候,总是会触发一个事件,从而导致其父元素或者其前代元素的事件也依次触发,弄了老半天,没弄好,后来才知道原来本身就自带处理这一问题的机制. 利用这行代码event.stopPropagation();就可以对其他的冒泡事件有一个限制. 以下是自己写的一串简单测试代码 <!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title&

js区分鼠标单双击 阻止事件冒泡

function clickOrDblClick(obj) { count++; if (obj != undefined) { var rowStr = $.trim($(obj).find("td:eq(1)").text().replace(/※/g, '')); currentRowpm = rowStr; } timer = window.setTimeout(function(obj) { var currentTr = $("#tbMainDeputy"