2012-06-25 157 views
39

返回false我点击设置像这样的活动:从jQuery的单击事件

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

的都有一个“返回false”

谁能解释这是什么一样,如果它需要的?

回答

75

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

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

如果'.dialogLink'<a>元素然后点击它的默认操作为导航到href。从点击处理程序返回false可以防止这种情况发生。

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

如果您想对点击做出响应,但让默认导航继续,则不要返回false。

延伸阅读:

+0

如果我将这两个事件编码到对话框中,它会是一样的吗? – Alan2

+1

这两行不是事件,它们是对'event'对象的方法的调用,您会注意到我已将其作为参数添加到函数中。 jQuery将该参数设置为与发生任何事件相关联的'event'对象。如果您将'event'对象传递给'dialog()'函数,那么它可以调用这些方法,但是我认为如果直接在显示它的位置执行,它会更易于维护。话虽如此,我建议你坚持你已经拥有的'return false':它更短。 – nnnnnn

+0

作为刚刚遇到这个问题并花了一点时间才意识到发生了什么的人,我认为调用'return false'不如说要阻止默认并停止传播。 – aug

3

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

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

实现此效果的现代方法是致电event.preventDefault(),这在DOM 2 Events specification中有详细说明。

所以正确的方法是:

$('.dialogLink') 
    .click(function (e) { 
     dialog(this); 
     e.preventDefault(); 
     e.stopPropagation(); // Stop bubbling up 
}); 
+0

你提到“现代”的方式,但如果它是一样的,它不是更好的代码返回false并保存从脚本中的一些字节:-) – Alan2

+0

如果它是一个jQuery事件处理程序,你可以肯定'返回false'将做这项工作。 – nnnnnn

+0

同意@nnnnnn。 –

0

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