老舊的一個優勢是,我第一次想到當我看到您的錯誤消息是「嗯...... $()
的功能真的是你認爲的嗎?「 :-)
你看,jQuery的$()
函數永遠不會返回null
或undefined
。如果你用這個名字叫它,jQuery()
也不是。即使你給它一個不匹配任何元素的選擇器,它也會返回一個空的jQuery對象—,非常類似於[]
,它是一個空數組—,而不是任何東西。
所以,你可以得到這個錯誤的唯一方法:
Cannot call method 'waypoint' of null
在這行代碼:
$('.container').waypoint('sticky');
是,如果$
是不 jQuery的功能。因爲這就是錯誤的意思:你正在嘗試撥打null.waypoint()
。唯一可能發生的情況是$('.container')
調用返回null
。
確實如此:您正在加載jQuery和Prototype.js,並且在您遇到錯誤時,您正在調用Prototype的$
函數版本。
在這裏,試試這個:在Chrome中打開您的頁面,打開開發者工具。它應該停止在那個.waypoint()
呼叫。
現在,按Esc鍵打開迷你控制檯(或單擊控制檯選項卡的開發工具的頂部),然後輸入到調音臺本:
$
它會顯示:
function $(element) {
if (arguments.length > 1) {
for (var i = 0, elements = [], length = arguments.length; i < length; i++)
elements.push($(arguments[i]));
return elements;
}
if (Object.isString(element))
element = document.getElementById(element);
return Element.extend(element);
}
現在鍵入:
jQuery
,它會顯示:
function (e,t){return new v.fn.init(e,t,n)}
絕對不是一樣的功能!
或者一個簡單的測試,類型:
$ === jQuery
和它打印:
false
哎呀。
要解決這個問題,您可能需要使用jQuery的noConflict()
功能,因此您可以同時使用jQuery和Prototype。下面是關於該主題的優秀新手必看:
Avoiding Conflicts with Other Libraries
(感謝@acdcjunior的參考!)
BTW,jQuery的的多個版本都沒有涉及這個問題。但是,你真的需要加載1.8.2和1.8.3嗎?這兩者之間的區別是什麼導致兼容性問題?
沒有下面的鏈接,我可以告訴你,無論是**這裏**。waypoint'不是你認爲它是什麼。 –
只使用jQuery的一個版本,最好是最新的版本。如果需要,遷移需要它的插件:http://blog.jquery.com/2013/05/01/jquery-migrate-1-2-0-released/ –
恩......你打算髮布一些代碼嗎?編輯:需要比這更多的代碼。在** my **代碼中,當問題實際上在其他地方時,我經常會遇到一個引用jquery庫中的一行的錯誤。這些都很難調試。 – sgroves