“return false;” 和 “e.preventDefault();” 的区别

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费积分!

您是否曾经在 jQuery 中看到过这两件事(标题中)?这是一个简单的例子

$("a").click(function() {
   $("body").append($(this).attr("href"));
   return false;
}

该代码将在每次点击链接时将href属性作为文本附加到 body 中,但**不会**实际跳转到该链接。“return false;”代码部分阻止浏览器执行该链接的默认操作。这与下面的代码作用相同:

$("a").click(function(e) {
   $("body").append($(this).attr("href"));
   e.preventDefault();
}

那么有什么区别呢?

区别在于return false;更进一步,它还阻止了该事件在 DOM 中传播(或“冒泡”)。您可能不知道的是,每当某个元素上发生事件时,该事件也会在每个父元素上触发。因此,假设您在一个盒子里面嵌套另一个盒子,两个盒子都绑定了点击事件。当您点击内层盒子时,外层盒子的点击事件也会触发,除非您阻止传播。如下所示:

换句话说

function() {
  return false;
}

// IS EQUAL TO

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

这一切可能比这复杂得多,并且文章 如这篇 可能更好地解释了所有内容。