2012-08-09 42 views
0

让原始的事件,我没有在手边的例子,但在某些情况下调用event.preventDefault()让通过(浏览到另一个页面,提交表单等),但返回false帮助原始事件。什么会造成这种情况?是什么原因导致的preventDefault通过

回答

1

您没有举手的例子吗?好的,让我发明一个可能或可能不是你想象的东西。

请记住,return false;相当于呼叫event.preventDefault();和​​。 编辑:这适用于使用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"); 
}); 

警报将显示。如果您将“跨度”处理程序更改为返回false,则不会显示警报。

+0

所以当'preventDefault'从工作,这是一个迹象,表明有一个更深层次的问题某处停止 '突然'? – Masse 2012-08-09 07:32:41

+0

可能,可能。但是(根据我的编辑)与“普通”的JS,不同的浏览器(或浏览器的版本 - 认为IE)不一定表现相同的方式。如果您在某个阶段遇到更具体的问题,您应该发布有关显示问题代码的问题。 – nnnnnn 2012-08-09 07:38:14

+0

大部分使用相同的浏览器。这是一个偶尔出现的问题,但令我感到不安的是,我不知道是什么原因造成的,以及这是否是更严重的迹象 – Masse 2012-08-09 07:56:25

1

event.preventDefault()阻止浏览器执行默认的动作(如果事件是取消),而不停止事件的进一步传播,而 返回假阻止事件传播(或“向上冒泡“)DOM,以及防止默认操作。

所以,

function() { 
    return false; 
} 

//等于

function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
} 
相关问题