我花了一些時間看着這個。
這就是它發生的原因。
原型的策略是擴展具有新行爲的DOM元素類,例如'hide'。等效的:
HTMLElement.prototype.hide = function(...) {...};
jQuery讓,如果一個元素都有相同的名稱作爲事件的功能,那麼它被認爲是默認行爲的元素在觸發該事件的假設。例如,這對於事件'焦點','模糊'等是有用的,其中既有名稱爲'焦點'的事件又有元素.focus()
上的匹配函數。當你調用jQuery的event.preventDefault()
時,它實際上並不是阻止的默認行爲。相反,它是相反的 - 如果你不調用event.preventDefault()
,然後jQuery查找與該事件同名的函數,然後調用它,如果它存在。
這裏是jQuery的SRC是手動調用「默認行爲」功能: https://github.com/jquery/jquery/blob/d837f119c3729565103005d5d7fa89e1dd8110cb/src/event.js#L338
因此,我們有我們的問題。 Prototype用新函數(即'hide')擴展了基本的HTMLElement原型。當同名的事件被觸發時,jQuery將這些函數視爲默認行爲。 Bootstrap的JS觸發了一個名稱相同的事件('hide'),這會錯誤地導致jQuery調用Prototype的Element.hide()
函數。
我打算根據這些信息研究解決方案。也許東西沿着線:
jQuery(window).load(function() {
// Defer this code until after the window 'load' event finishes firing
setTimeout(function() {
window.HTMLElement &&
window.HTMLElement.prototype.hide &&
delete window.HTMLElement.prototype.hide;
}, 0);
});
嘗試使用此引導友好的prototype.js,因爲它固定我的問題:http://stackoverflow.com/questions/19139063/twitter-bootstrap-3-dropdown-menu-disappears-when-used-with-原型-js – MWD 2013-10-03 15:02:00