2014-02-27 39 views
0

我们目前使用Twitter Bootstrap 2.3.2,并试图找出一种方法来绑定属于下拉组件的切换功能。我试图在全球范围内做到这一点,已经提出了这样的代码:如何覆盖twitter引导中的JavaScript函数

; (function ($, window, document, undefined) 
{ 
    var oldToggle = $.fn.dropdown.Constructor.prototype.toggle; 

    $.fn.dropdown.Constructor.prototype.toggle = function (e) 
     { 
      console.log('here'); 
      return oldToggle.call(this, e); 
     } 
})(jQuery, window, document); 

当我在引导文件把这段代码时,制动工作正常。当我尝试将其包含在页面的其他地方时,我的console.log从不执行。我在这里错过了什么?

这里是一个的jsfiddle的链接,其中上述 http://jsfiddle.net/whoiskb/8nvuk/1/

+2

你需要它的bootstrap.js文件后添加......此外,没有控制台显示任何错误? –

+0

当我包含脚本时,它包含在引导文件之后。控制台不显示任何错误。 – Kevin

+1

我对Bootstrap的工作方式并不熟悉,但这是否有可能发生?1)Bootstrap代码运行2)页面上的元素附加了“Toggle”事件处理程序3)您的代码在下拉菜单中覆盖Bootstrap功能原型,但现在已经太晚了。 – Zhihao

回答

2

发布的代码,您将无法从外部覆盖该功能。一旦该事件被绑定在升压电路

$(document) 
    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) 

看,任何改变原型不会生效,因为原有的功能获得通过,并不能借此回来。

https://github.com/twbs/bootstrap/blob/master/js/dropdown.js#L141

+0

这确实有道理,我的确看过。我现在试图看看是否可以重新绑定事件,但似乎并不奏效。我应该不能使用$(document).off('click.bs.dropdown.data-api')来移除现有事件 – Kevin

+0

它应该是'$(document).off('click.bs.dropdown。 data-api','[data-toggle = dropdown]')',但由于某种原因,在你的小提琴中不起作用。 – Prinzhorn