我明白,如果我返回false,它本质上是在调用e.preventDefault()和e.stopPropagation.
我的问题在于决定何时我想要继续事件流程而不是完全停止它.我们能否列出一些我想要使用的现实世界情况,e.preventDefault()而不是return false反之亦然,为我画出更清晰的画面?
编辑:
我是一个视觉学习者,看到 某些东西是如何工作的,而不是阅读它,我是如何理解它为什么起作用的.对于能为我发布代码示例的人,我将非常感激.
编辑:
基于@Pointy的回答和评论,我为那些视觉学习者创建了一个有效的jsFiddle演示.我认为它很好地总结了它.
您可能想在“提交”按钮的“单击”处理程序上使用“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()”方法,则事件将不会冒泡到委托处理程序,并且用户将遗憾地被剥夺一些令人兴奋的按钮动画。
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |