为什么preventDefault不起作用但返回false呢

时间:2012-07-06 19:54:27

标签: javascript html ajax jquery

有没有人知道为什么我的preventDefault代码不起作用? return false返回正常,但我的理解是,这不是真正的“正确”方式吗?

 if ($('.signup').length == 0) {
        $('.star').on('click',function(e){
            e.preventDefault();
            var starElement = $(this);
            var resourceId = starElement.parents('li').data('id');

            updateFavoritesSpan( starElement, starElement.hasClass('starred') );

            starElement.toggleClass('starred');
            starElement.parents('li').toggleClass('fvtd');
        });
        // voting
        $('.voting').on('click .up', function(e){
            e.preventDefault();
            sendVote($(this), 1);
        });

        $('.voting').on('click', '.down', function(e){
            e.preventDefault();
            sendVote($(this), -1);
        });
    }

4 个答案:

答案 0 :(得分:7)

return false;同时执行preventDefaultstopPropagation

preventDefault停止元素上的“默认”操作,stopPropagation会阻止事件冒泡到父元素。

我的猜测是,当你只preventDefault时,父母的某个事件仍会被触发。

答案 1 :(得分:3)

return falsepreventDefault()不同。

事实上return false是以下的组合或简写

  • preventDefault()
  • stopPropagation()

因此,请尝试添加此项(以及e.preventDefault()):

e.stopPropagation();

答案 2 :(得分:2)

有一个错字,改变这个:

$('.voting').on('click .up', function(e){

为:

$('.voting').on('click', '.up', function(e){

答案 3 :(得分:0)

为了完整性:

return false
也会触发
stopImmediatePropagation()
取消同一元素上的所有后续处理程序(在处理touchend事件时可能会派上用场,意味着取消后续点击)

在这里阅读 stopPropagation() event.stopImmediatePropagation()之间的区别:
jquery: stopPropagation vs stopImmediatePropagation