63

我有这样设置的点击事件:

$('.dialogLink')
    .click(function () {
        dialog(this);
        return false;
    });

都有一个“return false”

有人可以解释这是做什么的以及是否需要吗?

4

3 回答 3

104

当您false从事件处理程序返回时,它会阻止该事件的默认操作并阻止事件通过 DOM 冒泡。也就是说,它相当于这样做:

$('.dialogLink')
   .click(function (event) {
       dialog(this);
       event.preventDefault();
       event.stopPropagation();
});

如果'.dialogLink'是一个<a>元素,那么它在点击时的默认操作是导航到href. 从点击处理程序返回false可以防止这种情况。

至于您的情况是否需要它,我猜答案是肯定的,因为您想显示一个对话框以响应点击而不是导航。如果您放置了单击处理程序的元素在单击时没有默认操作(例如,当您单击 div 时通常不会发生任何事情),那么您不需要返回 false,因为没有什么可以取消。

如果你想对点击做一些事情,但让默认导航继续,那么不要返回 false。

进一步阅读:

于 2012-06-25T06:19:48.740 回答
6

事件处理程序的返回值决定了默认浏览器行为是否也应该发生。在点击链接的情况下,这将是跟随链接,但差异在表单提交处理程序中最为明显,如果用户输入信息错误,您可以取消表单提交。

我不相信有这方面的 W3C 规范。所有像这样的古老 JavaScript 接口都被赋予了“DOM 0”的绰号,并且大多未指定。阅读旧的 Netscape 2 文档可能会有一些运气。

实现这种效果的现代方式是调用event.preventDefault(),这在DOM 2 事件规范中指定。

所以正确的方法是:

$('.dialogLink')
   .click(function (e) {
       dialog(this);
       e.preventDefault();
       e.stopPropagation(); // Stop bubbling up
});
于 2012-06-25T06:23:03.310 回答
-1

事件处理程序的返回值决定了默认浏览器行为是否也应该发生。在点击链接的情况下,这将是跟随链接,但差异在表单提交处理程序中最为明显,如果用户输入信息错误,您可以取消表单提交。

于 2017-11-04T09:50:26.330 回答