在javascript函数的开始或结束时阻止默认事件操作的优点和缺点

时间:2013-01-03 15:53:16

标签: javascript javascript-events event-handling

在以下javascript代码示例中:

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

默认的优点和缺点是什么?在功能的开头或结尾阻止操作? - 假设无条件想要最终阻止它的情况。是否有任何技术理由选择单向?

上网时我发现只有one reference -dead博客,对不起谷歌缓存链接 - 并且在开头阻止默认操作的点将避免在js功能崩溃的情况下发生的操作。

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

3 个答案:

答案 0 :(得分:11)

由于你说的原因,我把我的防范代码放在了开头。如果函数中较早的js中存在错误,则已经阻止了默认操作。这可能是生产中需要的行为,但也可以帮助调试开发代码,请考虑:

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

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

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

答案 1 :(得分: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条件的返回。

答案 2 :(得分:0)

您没有任何区别,消息队列被困在您的函数中。