2015-12-02 68 views
8

末在几乎所有的实例/模板脚本我能找到之前,我看到event.preventDefault();在函数的结尾,就像这样:event.preventDefault()永远只是功能

$('.navbar-nav li a').bind('click', function(event) { 
    var $anchor = $(this); 
    $('html, body').stop().animate({ 
     scrollTop: $($anchor.attr('href')).offset().top 
    }, 1500, 'easeInOutExpo'); 
    event.preventDefault(); 
}); 

从我的角度来看,这个想法是“立即停止默认行为,然后做什么,我们必须做的”,这样的:

$('.navbar-nav li a').bind('click', function(event) { 
    event.preventDefault(); 

    var $anchor = $(this); 
    $('html, body').stop().animate({ 
     scrollTop: $($anchor.attr('href')).offset().top 
    }, 1500, 'easeInOutExpo'); 
}); 

所以我缺少什么?

+0

'立即停止默认behavior'活动放在在队列中,所以这并没有区别把它放在处理程序的顶部或底部。但请参阅TrueBlueAussie的回答,如果由于某种原因想要停止传播,使用简写方式'return false;',通常将它置于底部更方便。这就是说,为了可读性,我总是把它放在顶端,但这是我自己的看法 –

回答

11

在所示的两个具体示例中没有区别。把它放在你喜欢的地方:)

让它在最后的通常原因是它代替return false;,因为那通常是返回的地方。 return falsee.preventDefault()e.stopPropagation()的快捷方式。

的另一件事要记住是当你需要有条件地停止它,在这种情况下,preventDefault()进入中间(的if等):)