这篇文章让我对使用 Prototype 的 Bootstrap 的潜在问题有了一些了解。那里给出的解决方法实际上运作良好。我稍微调整了第一个并添加了一个检查是否实际加载了 Prototype 并将其组合在 jQueryNoConflict() 中作为标准 jQuery.noConflict() 的替代:
function jQueryNoConflict()
{
jQuery.noConflict();
if (typeof Prototype !== "undefined" && Prototype.BrowserFeatures.ElementExtensions)
{
var disablePrototypeJS = function (method, pluginsToDisable)
{
var handler = function (event)
{
event.target[method] = undefined;
setTimeout(function ()
{
delete event.target[method];
}, 0);
};
pluginsToDisable.each(function (plugin)
{
jQuery(window).on(method + '.bs.' + plugin, handler);
});
},
pluginsToDisable = ['collapse', 'dropdown', 'modal', 'tooltip', 'popover', 'tab'];
disablePrototypeJS('show', pluginsToDisable);
disablePrototypeJS('hide', pluginsToDisable);
}
}