2015-05-25 65 views
1

嗨我正要通过carasoul.js代码和跨越以下几行代码就来了:与自定义事件使用isDefaultPrevented()的

if (slideEvent.isDefaultPrevented()) return 

现在isDefaultPrevented()文件给出了foolowing例如:

$("a").click(function(event) { 
    alert(event.isDefaultPrevented()); // false 
    event.preventDefault(); 
    alert(event.isDefaultPrevented()); // true 
}); 

但我没有附加click event那么isDefaultPrevented这里的任何助攻如何? ,整个功能码可以看到如下::

Carousel.prototype.slide = function (type, next) { 
    var $active = this.$element.find('.item.active') 
    var $next  = next || this.getItemForDirection(type, $active) 
    var isCycling = this.interval 
    var direction = type == 'next' ? 'left' : 'right' 
    var that  = this 

    if ($next.hasClass('active')) return (this.sliding = false) 

    var relatedTarget = $next[0] 
    var slideEvent = $.Event('slide.bs.carousel', { 
     relatedTarget: relatedTarget, 
     direction: direction 
    }) 
    this.$element.trigger(slideEvent) 
    if (slideEvent.isDefaultPrevented()) return 

    this.sliding = true 

    isCycling && this.pause() 

    if (this.$indicators.length) { 
     this.$indicators.find('.active').removeClass('active') 
     var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) 
     $nextIndicator && $nextIndicator.addClass('active') 
    } 

    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" 
    if ($.support.transition && this.$element.hasClass('slide')) { 
     $next.addClass(type) 
     $next[0].offsetWidth // force reflow 
     $active.addClass(direction) 
     $next.addClass(direction) 
     $active 
     .one('bsTransitionEnd', function() { 
      $next.removeClass([type, direction].join(' ')).addClass('active') 
      $active.removeClass(['active', direction].join(' ')) 
      that.sliding = false 
      setTimeout(function() { 
      that.$element.trigger(slidEvent) 
      }, 0) 
     }) 
     .emulateTransitionEnd(Carousel.TRANSITION_DURATION) 
    } else { 
     $active.removeClass('active') 
     $next.addClass('active') 
     this.sliding = false 
     this.$element.trigger(slidEvent) 
    } 

    isCycling && this.cycle() 

    return this 
    } 

为什么用isDefaultPrevented()

回答

1

Bootstrap轮播在有趣的时刻触发事件,例如在它滑动之前和之后。如果你想要做的事,当这些事件发生时,你可以对此作出反应,像这样:

$('.carousel').on('slide.bs.carousel', function (e) { 
    // do something before a carousel slides 
}); 

如果你想防止传送带从它的默认行为,你能做到这一点,像这样:

$('.carousel').on('slide.bs.carousel', function (e) { 
    // prevent the carousel from sliding 
    e.preventDefault(); 
}); 

引导然后检查如果事件处理函数调用preventDefault()并停止,如果它发生了它的默认行为:

if (slideEvent.isDefaultPrevented()) return