问题 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');
});

那么我错过了什么?


5505
2017-12-02 15:30


起源

stop immediately the default behavior 事件被放入队列中,因此将它放在处理程序的顶部或底部没有区别。但是看看TrueBlueAussie的答案,如果由于某种原因你想要停止传播,使用速记方式通常会更方便 return false;。这就是说,我总是把它放在首位只是为了可读性,但这是我自己的看法 - A. Wolff


答案:


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

最终获得它的通常原因是它取代时 return false; 因为那通常是回归必须的地方。 return false 是两者的捷径 e.preventDefault()    e.stopPropagation()

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


15
2017-12-02 15:32