有如下代码:
<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到底是怎么一回事。
分享到:
相关推荐
### JavaScript中的`preventDefault`与`stopPropagation` #### 一、`preventDefault`详解 `preventDefault`方法在JavaScript中主要用于阻止元素的默认行为。在Web开发中,很多HTML元素都具有默认的行为,例如,`...
首先讲解一下js中preventDefault和stopPropagation两个方法的区别:preventDefault方法的起什么作用呢?我们知道比如百度,这是html中最基础的东西,起的作用就是点击百度链接到http://www.baidu.com,这是属于标签的...
` 实际上相当于: ```javascript function(e) { e.preventDefault(); e.stopPropagation(); } ``` 如果你不希望事件继续传播到父元素,那么在某些情况下,使用 `e.preventDefault();` 和 `e.stopPropagation();`...
`return false`的效果类似于`event.preventDefault()`方法,在某些情况下,你可以使用`event.preventDefault()`来替代`return false`,尤其是在使用现代的JavaScript框架或者遵循W3C的事件模型时。 关于表单的提交...
在JavaScript编程中,`return false`是一个经常被用来阻止默认动作和事件冒泡的关键字。...需要注意的是,`return false`与`event.preventDefault()`在某些上下文中是等效的,但在使用时需要考虑它们适用的上下文环境。
总之,理解并恰当使用`return false`、`.preventDefault()` 和 `.stopPropagation()` 是编写高效、可控的jQuery事件处理代码的关键。根据实际情况选择合适的方法,可以有效地控制事件的执行流程,提高用户体验。
本文将深入探讨何时以及如何正确地阻止浏览器的默认行为,以及`return false`与`event.preventDefault()`、`event.stopPropagation()`和`event.stopImmediatePropagation()`之间的区别。 首先,`return false`在...
当`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 (!/^...
在JavaScript的DOM事件处理中,`event.preventDefault()`和`event.stopPropagation()`常用于此目的。然而,对于Node.js的EventEmitter,情况有所不同。虽然它没有提供直接的`stopPropagation`方法,但有一种约定俗成...
测试代码中提供的 `E(e).prevent()` 函数就是这样一个封装,它会根据浏览器的不同特性选择使用 `event.preventDefault()` 或 `event.returnValue = false`。 总结来说,`return false` 在阻止事件默认行为时并不是...
在JavaScript中,限制用户在文本框(input)中只能输入数字或...同时,为了提高用户体验,应考虑使用更现代的事件处理方式,如`addEventListener`,并使用`event.preventDefault()`代替`event.returnValue = false`。
对于不支持此方法的IE浏览器,我们需要使用`window.event.returnValue = false;`来达到相同的效果。以下是一个示例函数: ```javascript function stopDefault(e) { if (e && e.preventDefault) { e....
e.returnValue = false; e.preventDefault(); } alert(3); if (window.event) { e.cancelBubble = true; } else { e.stopPropagation(); } alert(4); } ();">ccccc ();">baidu.com</a> ``` #### 五...
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 ...
<input onpaste="return false" oncopy="return false;" oncut="return false;"> ``` 这些属性可以附加在`<body>`标签或者任何输入框上,以阻止用户进行选中、复制、粘贴和剪切操作。 ### 4. 图标和标题的自定义 ...