2015-04-17 49 views
0

这是我第一次使用这个库,我遇到了一个很奇怪的问题。我正在使用独立的v0.10.1版本。Bootstrap Tour删除每个步骤中突出显示的元素

这是我的代码:

var tour = new Tour({ 
    backdrop: true, 
    debug: true, 
    steps: [ 
     { 
      element: '#myResourcesMenu', 
      title: "Title of my step", 
      content: "Content of my step", 
      placement: "bottom" 
     }, 
     { 
      element: '.access-unit-button:not(.disabled)', 
      title: "Title of my step", 
      content: "Content of my step" 
     } 
    ], 
    onHidden: function(tour) { 
     jQuery(tour.getStep(tour._current).element).show(); 
    } 
}); 

我每次点击上一页/下一页/游完,它消除了提示(明显),也隐藏,以“显示:无”,我突出显示的元素相关的步骤。它不应该隐藏我的元素,不是吗?

我发现避免这个问题的唯一办法,是把这个代码:

onHidden: function(tour) { 
    jQuery(tour.getStep(tour._current).element).show(); 
} 

我也看了bottstrap游的代码,发现是hideStep函数内造成这一行:

$element.popover('destroy').removeClass("tour-" + _this._options.name + "-element tour-" + _this._options.name + "-" + i + "-element"); 

如果我删除了“popover('destroy')”,它按预期的方式工作,但是单击End游览时它不会删除步骤提示,因此它不是解决方案。

有什么想法发生了什么?

回答

0

经过一天的研究,我发现这里发生了什么。

基本上,库PrototypeJS与Bootstrap不兼容,Bootstrap Tour使用其Tooltip类。

在这里你可以看到为什么: https://github.com/twbs/bootstrap/issues/6921

我刚才做的是注释此行:

Tooltip.prototype.hide = function() { 
    var that = this 
    var $tip = this.tip() 
    var e = $.Event('hide.bs.' + this.type) 

    this.$element.removeAttr('aria-describedby') 

    function complete() { 
    if (that.hoverState != 'in') $tip.detach() 
    that.$element.trigger('hidden.bs.' + that.type) 
    } 

    //this.$element.trigger(e) // THIS ONE 

    if (e.isDefaultPrevented()) return 

    $tip.removeClass('in') 

    $.support.transition && this.$tip.hasClass('fade') ? 
    $tip 
     .one('bsTransitionEnd', complete) 
     .emulateTransitionEnd(150) : 
    complete() 

    this.hoverState = null 

    return this 
} 

这避免触发PrototypeJS隐藏事件。

现在它按预期工作。