javascript 什么原因导致preventDefault允许原始事件通过

gopyfrb3  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(139)

我手边没有例子,但是在某些情况下调用event.preventDefault()会让原始事件通过(导航到页面,提交表单等),但是返回错误的帮助。

xoshrz7s

xoshrz7s1#

你没有现成的例子吗?好吧,让我来创造一个例子,它可能是也可能不是你所想到的。
请记住,return false;相当于同时调用event.preventDefault();event.stopPropagation()编辑:这适用于jQuery,它明确地实现了这种行为,并且还规范化了event.preventDefault()event.stopPropagation()以在所有浏览器中使用。并不是所有使用“plain”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,则警告将不显示。

iecba09b

iecba09b2#

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

所以,

function() {
  return false;
}

//等于

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

相关问题