11

在以下 javascript 代码示例中:

var myButton = $('#myButton');
myButton.click(function (event) {
    /* stuff... */
    event.preventDefault();
});

在函数开始或结束时阻止默认操作的优点和缺点是什么?- 假设最终无条件地想要阻止它。有任何技术理由选择一种方式吗?

在网上冲浪时,我发现只有一个参考- 死博客,抱歉 Google 缓存链接 - 并指出在开始时阻止默认操作将避免在 js 函数崩溃的情况下发生该操作。

注意:我在示例中使用 jQuery 只是为了熟悉,问题与 jQuery 无关,经典事件处理模式的答案将是相同的。

4

3 回答 3

11

出于你所说的原因,我把我的预防代码放在了开头。如果在函数前面的 js 前面有错误,那么默认的动作就已经被阻止了。这可能是生产中所需的行为,但也有助于调试您的开发代码,请考虑:

$('a').on('click', function(e) {
  console.log('some debugging information here');
  // Other stuff
  e.preventDefault();
});

如果发生错误,页面可能会在您阅读调试信息之前刷新或跟随锚点的 href。将操作切换到顶部将确保您可以在控制台中读取输出。

编辑正如 Axel 在评论中指出的那样,另一个优点是您立即意识到代码正在替换默认操作而不是补充它。

于 2013-01-03T15:58:22.863 回答
3

最终决定放在哪里preventDefault()完全取决于开发人员的选择。尽管在大多数情况下已经指出,更好的选择是将它放在代码的最顶部以避免像这样的不可预测的行为:

 $('#one').click(function(ev){
  //ev.preventDefault(); // for 90% this is better choice, consider example below
  alert('no hey!');
  return; // this is very simple example, in more complex code sometimes it could not be such obvious
  ev.preventDefault(); // sometimes though it may be required to keep default action depending on some cases
})

但是必须承认,您可能会根据某些情况保留默认操作,因为我的观点是这种情况很少见,但是您可以将防止默认设置在底部并在某些 if 条件下使用 return。

于 2013-01-07T13:06:48.827 回答
0

You don't have any diference, the message queue is trapped in your function.

于 2013-01-03T15:58:40.110 回答