当我想阻止其他事件处理程序在触发某个事件后执行时,我可以使用以下两种技术之一。我将在示例中使用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,这是有原因的吗?更好的方法是什么?


当前回答

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事件处理程序中返回false实际上与对传递的jQuery.event对象同时调用e.preventDefault和e.stopPropagation相同。

e.preventDefault()将防止发生默认事件,e.stopPropagation()将阻止事件冒泡,返回false将同时执行这两种操作。请注意,这种行为不同于正常(非jQuery)事件处理程序,特别是,返回false不会阻止事件冒泡。

来源:John Resig

使用event.prpreventDefault()而不是“return false”来取消href单击有什么好处?

我想

event.prpreventDefault()

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

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

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

正如你所称,这不是一个“JavaScript”问题;这是一个关于jQuery设计的问题。

jQuery和之前链接的John Resig引用(在karim79的消息中)似乎是对事件处理程序一般工作方式的误解。

事实:返回false的事件处理程序阻止该事件的默认操作。它不会停止事件传播。从Netscape Navigator的旧时代开始,事件处理程序就一直以这种方式工作。

返回false的事件处理程序内容属性和事件处理程序IDL属性将阻止该事件处理程序的默认操作。

jQuery中发生的情况与事件处理程序中发生的不同。DOM事件侦听器和MSIE“附加”事件完全不同。

有关进一步阅读,请参阅[[W3C DOM 2事件文档]][1]。

return false和event.prpreventDefault()之间的主要区别是,将不会执行return false以下的代码,在event.prpredictDefault()情况下,您的代码将在该语句之后执行。

当你写return false时,它在幕后为你做以下事情。

* Stops callback execution and returns immediately when called.
* event.stopPropagation();
* event.preventDefault();

e.预防违约();

它只是停止元素的默认操作。

实例示例:-

阻止超链接跟随URL,阻止提交按钮提交表单。当您有多个事件处理程序,而您只想阻止默认事件发生,多次发生时,为此,我们需要在函数()的顶部使用。

原因:-

使用e.preventDefault()的原因;在我们的代码中,如果代码中出现错误,那么它将允许执行链接或表单以提交,或者允许执行或允许执行您需要执行的任何操作。链接或提交按钮将被提交,并且仍然允许事件的进一步传播。

<!DOCTYPE html><html lang=“en”dir=“ltr”><head><meta charset=“utf-8”><title></title></head><body><script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script><a href=“https://www.google.com“onclick=”doSomethingElse()“>防止页面重定向</a><script type=“text/javascript”>函数doSomethingElse(){console.log(“这是测试…”);}$(“a”).点击(函数(e){e.预防违约();});</script></body></html>

return False;

它只是停止函数()的执行。

“return false;”将结束整个过程的执行。

原因:-

使用return false的原因;就是您不想在严格模式下执行该函数。

<!DOCTYPE html><html lang=“en”dir=“ltr”><head><meta charset=“utf-8”><title></title></head><body><a href=“#”onclick=“returnFalse();”>Blah</a><script type=“text/javascript”>函数returnFalse(){console.log(“在没有位置重定向的情况下返回false….”)return false;location.href=“http://www.google.com/";}</script></body></html>