0

我手头没有示例,但在某些情况下,调用event.preventDefault()让原始事件通过(导航到页面、提交表单等)但返回 false 帮助。什么可能导致这种情况?

4

2 回答 2

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,则不会显示警报。

于 2012-08-09T07:18:01.337 回答
1

event.preventDefault()防止浏览器执行默认操作(如果事件是可取消的)而不停止事件的进一步传播,而 return false防止事件传播(或“冒泡”)DOM,同时防止默认动作。

所以,

function() {
  return false;
}

// 等于

function(e) {
  e.preventDefault();
  e.stopPropagation();
}
于 2012-08-09T07:19:27.290 回答