search

Home  >  Q&A  >  body text

javascript - 为什么 Chrome 调试器里警告使用 preventDefault() 代替 return false?

他们俩实现的功能都一样,都是阻止默认的点击事件,那么为什么建议用 preventDefault 代替呢?

// 旧版写法
$('a').click(function () {
    return false;
});

// 新版写法
$('a').click(function (e) {
    e.preventDefault();
});
PHPzPHPz2895 days ago604

reply all(3)I'll reply

  • ringa_lee

    ringa_lee2017-04-10 14:38:10

    通常, event.preventDefault()都会放在event handler的第一行。
    这样的话, 假设在event handler中有一个JavaScript error,
    那么, 放在first line的event.preventDefault()就可以阻止submit行为, console还可以report这个error.

    而, return false是放在event handler的最后一行的。
    并且, 他是相当于event.preventDefault()event.stopPropagation(), 如果我们想阻止bubbling的话, 就可以用return false.

    更重要的是return false只能用于DOM Level 0 Event handler,在DOM Level 2 Event Handler是没用的, demo.
    而, event.preventDefault()2者都兼容。

    综上, 当然是推荐用event.preventDefault()啦。

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:38:10

    return false;有两个作用,除了阻止默认行为外,还可以用来阻止冒泡。所以哪个方式更好,你自己应该明白了。

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 14:38:10

    return false 等同于
    e.preventDefault();
    e.stopPropagation();
    的组合。

    想更清楚的了解区别,看看这个在线调试:http://www.gbtags.com/gb/debug/de1361ab-0605-4c6d-a21b-8c082e3bd251.htm

    reply
    0
  • Cancelreply