当我想阻止其他事件处理程序在触发某个事件后执行时,我可以使用以下两种技术之一。我将在示例中使用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())是要采用的选项,但您必须知道您所处的环境和目标是什么。

加油你的编码有一篇很棒的文章,返回错误;vs event.prpreventDefault()vs event.stopPropagation()vs event.stopImmediatePropagation)。

其他回答

我认为最好的方法是使用event.prpreventDefault(),因为如果在处理程序中引发了一些异常,那么将跳过return false语句,并且行为将与您想要的相反。

但是如果您确定代码不会触发任何异常,那么您可以使用任何您希望的方法。

如果您仍然希望返回false,那么可以将整个处理程序代码放在try-catch块中,如下所示:

$('a').click(function (e) {
  try{
      your code here.........
  }
   catch(e){}
  return false;
});

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

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

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

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

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

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

从jQuery事件处理程序中返回false实际上与对传递的jQuery.event对象同时调用e.preventDefault和e.stopPropagation相同。

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

来源:John Resig

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

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

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

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

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

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

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