什么是使用return false而不是e.preventDefault()的实际应用程序,反之亦然?

Cod*_*ick 5 javascript jquery

我明白,如果我返回false,它本质上是在调用e.preventDefault()e.stopPropagation.

我的问题在于决定何时我想要继续事件流程而不是完全停止它.我们能否列出一些我想要使用的现实世界情况,e.preventDefault()而不是return false反之亦然,为我画出更清晰的画面?

编辑:

我是一个视觉学习者,看到 某些东西是如何工作的,而不是阅读它,我是如何理解它为什么起作用的.对于能为我发布代码示例的人,我将非常感激.

编辑:

基于@Pointy的回答和评论,我为那些视觉学习者创建了一个有效的jsFiddle演示.我认为它很好地总结了它.

Poi*_*nty 4

您可能想在“提交”按钮的“单击”处理程序上使用“preventDefault()”,但不返回 false。为什么?因为您可能有一个按钮的“本地”处理程序,它可以决定是否继续表单提交。但是,可能还有其他使用“.delegate()”或“.live()”设置的处理程序,它们根据按钮单击执行其他有趣的操作,因此我希望允许事件冒泡到这些处理程序。

编辑— 值得注意的是,false返回值停止传播(冒泡)和默认行为的约定是 jQuery 的事情,而不是本机的。

编辑更多作为说明,请考虑以下 HTML:

<body>
  <form name='foo' action='whatever'>
    <!-- ... -->
    <input type='submit' value='Go' id='mainSubmit'>
  </form>
</body>
Run Code Online (Sandbox Code Playgroud)

现在,如果我想在页面上的任何按钮单击上发生某种奇特的动画,我可能有一些通过“.delegate()”连接的代码:

// provide entertaining animation upon button clicks
$('body').delegate('input:submit, input:button, button', 'click', function() {
  $(this).performExcitingAnimation();
});
Run Code Online (Sandbox Code Playgroud)

对于表单中的提交按钮,我可能想要进行表单验证来决定表单是否真的可以提交:

$('#mainSubmit').click(function(e) {
  if ($(this).closest('form').valid()) return true;
  $('#errorBox').text("Uh oh something is wrong");
  e.preventDefault(); // ... instead of return false
});
Run Code Online (Sandbox Code Playgroud)

如果该处理程序使用return false;而不是调用“preventDefault()”方法,则事件将不会冒泡到委托处理程序,并且用户将遗憾地被剥夺一些令人兴奋的按钮动画。