`

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?

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


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


我想知道这个return false到底是怎么一回事。
分享到:
评论
4 楼 yuan 2010-02-09  
http://api.jquery.com/bind/
引用
Returning false from a handler is equivalent to calling both .preventDefault() and .stopPropagation() on the event object.
3 楼 yuan 2009-07-16  
lingsl 写道
IE里cancelBubble属性就是stopPropagation()

没错,因为IE只支持事件冒泡,所以IE里事件的propagation只有bubble一种,所以这样的说法应该是成立的。但是好像跟这篇文字的主题没什么关系吧?
2 楼 lingsl 2009-07-16  
IE里cancelBubble属性就是stopPropagation()
1 楼 yuan 2009-06-06  
今天才知道,IE的event没有preventDefault()方法,只有一个returnValue属性。把这个属性设置为false跟preventDefault()方法的效果一样,并不会阻止事件的传播。

相关推荐

    js(冒泡)中的preventDefault和stopPropagation.doc

    ### JavaScript中的`preventDefault`与`stopPropagation` #### 一、`preventDefault`详解 `preventDefault`方法在JavaScript中主要用于阻止元素的默认行为。在Web开发中,很多HTML元素都具有默认的行为,例如,`...

    js中的preventDefault与stopPropagation详解

    首先讲解一下js中preventDefault和stopPropagation两个方法的区别:preventDefault方法的起什么作用呢?我们知道比如百度,这是html中最基础的东西,起的作用就是点击百度链接到http://www.baidu.com,这是属于标签的...

    return false;和e.preventDefault();的区别

    ` 实际上相当于: ```javascript function(e) { e.preventDefault(); e.stopPropagation(); } ``` 如果你不希望事件继续传播到父元素,那么在某些情况下,使用 `e.preventDefault();` 和 `e.stopPropagation();`...

    JavaScript中return false的用法

    `return false`的效果类似于`event.preventDefault()`方法,在某些情况下,你可以使用`event.preventDefault()`来替代`return false`,尤其是在使用现代的JavaScript框架或者遵循W3C的事件模型时。 关于表单的提交...

    js中return false(阻止)的用法

    在JavaScript编程中,`return false`是一个经常被用来阻止默认动作和事件冒泡的关键字。...需要注意的是,`return false`与`event.preventDefault()`在某些上下文中是等效的,但在使用时需要考虑它们适用的上下文环境。

    学习jQuey中的return false

    总之,理解并恰当使用`return false`、`.preventDefault()` 和 `.stopPropagation()` 是编写高效、可控的jQuery事件处理代码的关键。根据实际情况选择合适的方法,可以有效地控制事件的执行流程,提高用户体验。

    浅析return false的正确使用

    本文将深入探讨何时以及如何正确地阻止浏览器的默认行为,以及`return false`与`event.preventDefault()`、`event.stopPropagation()`和`event.stopImmediatePropagation()`之间的区别。 首先,`return false`在...

    网页右键ie不支持event.preventDefault和event.returnValue (需要加window)

    当`window.event.returnValue`被赋值为`false`时,相当于阻止了事件的默认行为。下面是一个兼容IE和非IE浏览器的示例函数: ```javascript function stopDefault(event) { // 检查是否支持event.preventDefault() ...

    常用的表单提交判断函数

    /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/.test(inputValue))`,使用正则表达式验证邮箱格式。 - **电话号码验证**:`if (!/^1[3-9]\d{9}$/.test(phone))`,针对中国的手机号码格式进行验证。 - **URL验证**:`if (!/^...

    EventEmitter:简单的事件发射器,可以用“return false”语句取消

    在JavaScript的DOM事件处理中,`event.preventDefault()`和`event.stopPropagation()`常用于此目的。然而,对于Node.js的EventEmitter,情况有所不同。虽然它没有提供直接的`stopPropagation`方法,但有一种约定俗成...

    return false,对阻止事件默认动作的一些测试代码

    测试代码中提供的 `E(e).prevent()` 函数就是这样一个封装,它会根据浏览器的不同特性选择使用 `event.preventDefault()` 或 `event.returnValue = false`。 总结来说,`return false` 在阻止事件默认行为时并不是...

    「js限制文本框只能输入数字或字母的方法总结」.docx

    在JavaScript中,限制用户在文本框(input)中只能输入数字或...同时,为了提高用户体验,应考虑使用更现代的事件处理方式,如`addEventListener`,并使用`event.preventDefault()`代替`event.returnValue = false`。

    js阻止默认浏览器行为与冒泡行为的实现代码.docx

    对于不支持此方法的IE浏览器,我们需要使用`window.event.returnValue = false;`来达到相同的效果。以下是一个示例函数: ```javascript function stopDefault(e) { if (e && e.preventDefault) { e....

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

    e.returnValue = false; e.preventDefault(); } alert(3); if (window.event) { e.cancelBubble = true; } else { e.stopPropagation(); } alert(4); } ();"&gt;ccccc ();"&gt;baidu.com&lt;/a&gt; ``` #### 五...

    使用JavaScript在ASP文本框控件中仅允许数字值

    return false; } var value = input.value; if (value.includes(".") && event.key === ".") { // 如果已有小数点,阻止再次输入小数点 event.preventDefault(); return false; } if (!regex.test(value + ...

    禁止浏览器刷新和鼠标刷新还有键盘刷新

    通过`document.onkeydown`事件,我们可以检查按键代码(keyCode)是否等于116(F5的键码),如果匹配,则阻止默认行为(`event.preventDefault()`或`event.returnValue=false`)。 示例代码: ```javascript ...

    JS网页屏蔽右键代码.txt

    &lt;input onpaste="return false" oncopy="return false;" oncut="return false;"&gt; ``` 这些属性可以附加在`&lt;body&gt;`标签或者任何输入框上,以阻止用户进行选中、复制、粘贴和剪切操作。 ### 4. 图标和标题的自定义 ...

Global site tag (gtag.js) - Google Analytics