我手头没有示例,但在某些情况下,调用event.preventDefault()
让原始事件通过(导航到页面、提交表单等)但返回 false 帮助。什么可能导致这种情况?
2 回答
你手头没有例子吗?好吧,让我发明一个可能是也可能不是你所想的任何东西。
请记住,return false;
这相当于同时调用event.preventDefault();
and event.stopPropagation()
。编辑:这适用于 jQuery,它明确地实现了这种行为,并且规范化event.preventDefault()
并event.stopPropagation()
在所有浏览器中使用。它在所有带有“普通” JS 的浏览器中都不是这样工作的,事实上旧的 IE 版本根本不支持event.preventDefault()
,它们有自己的等价物event.returnValue = false;
如果您有嵌套元素并且您在多个级别处理相同的事件,那么调用event.preventDefault()
不会停止外部元素的事件处理程序运行,但return false
会因为它停止事件的传播。
一个演示它的例子:http: //jsfiddle.net/nnnnnn/KjLv3/
<a href="#"><span>Click me to see an alert</span></a>
// using jQuery for simplicity in the example:
$("a span").click(function(e){
e.preventDefault();
});
$("a").click(function() {
alert("Hello");
});
将显示警报。如果您将“a span”处理程序更改为返回 false,则不会显示警报。
event.preventDefault()防止浏览器执行默认操作(如果事件是可取消的)而不停止事件的进一步传播,而 return false防止事件传播(或“冒泡”)DOM,同时防止默认动作。
所以,
function() {
return false;
}
// 等于
function(e) {
e.preventDefault();
e.stopPropagation();
}