return false相当于preventDefault + stopPropagation?

有如下代码:
<html>
<head>
<script src='jquery-1.3.2.js'></script>
<script>
$(function(){
$('li:has(ul)').click(function(e){
alert($(this).attr('name'));
});
})
</script>
</head>
<body>
<ul>
<li name='li1'>li1
<ul>
<li name='li1.1'>li1.1</li>
<li name='li1.2'>li1.2</li>
<li name='li1.3'>li1.3
<ul>
<li>1.3.1</li>
<li>1.3.2</li>
</ul>
</li>
</ul>
</li>
<li name='li2'>li2</li>
</ul>
</body>
</html>

当我点击1.3.1的时候,由于li1.3.1没有子节点ul,不满足:has(ul)的条件,所以li1.3.1本身没有注册onclick事件。但由于事件会冒泡,往上传递到li1.3,再往上还会传递到li1,这两个li都有子节点ul,所以会响应onclick事件。

当我们在做一个可折叠的列表的时候,这样冒泡的传递事件是会出问题的:我们并不希望在点击子节点的时候父节点跟着响应,所以我首先想到的是在alert($(this).attr('name'));后面添加一句e.stopPropagation();。

可是我看到书上的做法并不是这样,书上的做法是直接return false;。在我的印象中,return false跟e.preventDefault()是划等号的。可是我试了一下return false,果然有阻止事件传递的效果。我想如果return false可以阻止事件传递,那event.preventDefault()是不是也有同样的效果呢?于是又试着把return false用e.preventDefault()替换了,但结果是preventDefault()方法起不到阻止事件传递的效果。

这样是不是可以说:return false的作用是在阻止与事件相关的默认动作的同时阻止事件的传播。也就是return false相当于preventDefault + stopPropagation?

可是[quote="《JavaScript权威指南》Page 416"]在2级DOM API中,可以调用preventDefault()方法,与在0级事件模型中返回false一样。[/quote]

google了一把,又有人这么说:
[url]http://www.nabble.com/event.preventDefault()-seems-to-fail-td20026412s27240.html[/url]
[quote="Choan Gálvez"]- `return false` prevents the default action and stops the event
propagation.[/quote]

我想知道这个return false到底是怎么一回事。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值