是什么导致preventDefault让原始事件通过

时间:2012-08-09 07:00:07

标签: javascript javascript-events

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

2 个答案:

答案 0 :(得分:1)

你手边没有例子吗?好的,让我发明一个可能是也可能不是你想到的东西。

请注意,return false;相当于同时调用event.preventDefault();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,则不会显示警报。

答案 1 :(得分:1)

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

所以,

function() {
  return false;
}

//等于

function(e) {
  e.preventDefault();
  e.stopPropagation();
}