当我想阻止其他事件处理程序在触发某个事件后执行时,我可以使用以下两种技术之一。我将在示例中使用jQuery,但这也适用于普通JS:

1.event.prpreventDefault()

$('a').click(function (e) {
    // custom handling here
    e.preventDefault();
});

2.返回false

$('a').click(function () {
    // custom handling here
    return false;
});

这两种停止事件传播的方法之间有什么显著的区别吗?

对我来说,返回false;与执行方法相比,它更简单、更短,并且可能更不容易出错。使用该方法,您必须记住正确的大小写、括号等。

此外,我必须在回调中定义第一个参数才能调用该方法。也许,我应该避免这样做,而是使用preventDefault,这是有原因的吗?更好的方法是什么?


当前回答

我想

event.prpreventDefault()

是w3c指定的取消事件的方式。

您可以在W3C事件取消规范中阅读此内容。

此外,不能在任何情况下都使用return false。当在href属性中提供javascript函数时,如果返回false,则用户将被重定向到一个写有false字符串的页面。

其他回答

根据我的经验,event.stopPropagation()主要用于CSS效果或动画作品,例如,当你对卡片和按钮元素都有悬停效果时,当你将鼠标悬停在按钮上时,卡片和按钮都会触发悬停效果。在这种情况下,你可以使用event.stopPropagation(,event.prpreventDefault()用于防止浏览器操作的默认行为。例如,您有表单,但您只为提交操作定义了单击事件,如果用户通过按enter键提交表单,则浏览器由按键事件触发,而不是单击事件。在这里,您应该使用event.prpreventDefault()来避免不适当的行为。我不知道什么是返回错误;对不起。要了解更多信息,请访问此链接并使用第33行https://www.codecademy.com/courses/introduction-to-javascript/lessons/requests-i/exercises/xhr-get-request-iv

根据我的经验,与使用return false相比,使用event.prpreventDefault()至少有一个明显的优势。假设您正在捕获锚标记上的单击事件,否则,如果用户被导航离开当前页面,这将是一个大问题。如果您的点击处理程序使用return false来阻止浏览器导航,则会导致解释器无法到达return语句,浏览器将继续执行锚标记的默认行为。

$('a').click(function (e) {
  // custom handling here

  // oops...runtime error...where oh where will the href take me?

  return false;
});

使用event.prpreventDefault()的好处是可以将其作为处理程序中的第一行添加,从而确保锚点的默认行为不会被触发,无论是否未到达函数的最后一行(例如运行时错误)。

$('a').click(function (e) {
  e.preventDefault();

  // custom handling here

  // oops...runtime error, but at least the user isn't navigated away.
});

根据我的经验,我认为使用

event.preventDefault() 

几乎在我们需要时停止或阻止提交事件,而不是返回falseevent.prpreventDefault()工作正常。

preventDefault()和return false是防止发生默认事件的不同方法。

例如,当用户单击外部链接时,我们应该显示一个确认模式,询问用户是否重定向到外部网站:

hyperlink.addEventListener('click', function (e) {
    // Don't redirect the user to the link
    e.preventDefault();
});

或者我们不想在单击表单的提交按钮时提交表单。相反,我们希望首先验证表单:

submitButton.addEventListener('click', function (e) {
    // Don't submit the form when clicking a submit
    e.preventDefault();
});

差异

如果使用addEventListener方法处理事件,return false对默认行为没有任何影响。它仅在事件处理程序声明为元素的属性时有效:

hyperlink.addEventListener('click', function (e) {
     // Does NOT work
     return false;
 });
    
 // Work
 hyperlink.onclick = function (e) {
     return false;
};

根据HTML5规范,返回false将取消除mouseover事件之外的事件。

良好做法

建议在事件处理程序中使用preventDefault方法,而不是返回false。因为后者只能使用onclick属性,该属性将删除同一事件的其他处理程序。如果您使用jQuery来管理事件,则可以在事件处理程序中使用return false:

$(element).on('click', function (e) {
        return false;
});

在返回值false之前,处理程序将执行其他操作。问题是,如果处理程序中发生任何运行时错误,我们将无法在结尾处返回false语句。

在这种情况下,将采用默认行为:

$(element).on('click', function (e) {
    // Do something here, but if there's an error at runtime
    // ...
    return false;
});

我们可以在执行任何自定义处理程序之前使用preventDefault方法来避免这种情况:

$(element).on('click', function (e) {
    e.preventDefault();

    // Do something here
    // The default behavior is prevented regardless of errors at runtime
    // ...
});

很高兴知道

如果您使用jQuery来管理事件,那么return false的行为将与preventDefault()和stopPropagation()方法相同:

$(element).on('click', function (e) {
    // Prevent the default event from happening and
    // prevent the event from bubbling up to the parent element
    return false;
});

当使用jQuery时,return false是在调用它时执行3个单独的操作:

event.prpreventDefault();event.stopPropagation();停止回调执行并在调用时立即返回。

有关更多信息和示例,请参阅jQueryEvents:Stop(Mis)UsingReturnFalse。