2013-06-28 42 views
1

我想實現這個方法不能調用方法「」: http://www.webtutorialplus.com/sticky-header-on-scroll-jquery/jQuery的錯誤空

帶有粘性頭在我的網站 http://storkbox.gopagoda.com/

我想要灰色的菜單是粘的,但我得到的錯誤:

Uncaught TypeError: Cannot call method 'waypoint' of null 

在該行

$('.container').waypoint('sticky'); 

在頁面上有一個容器類的div,所以它不應該爲空

我不知道爲什麼,我唯一的猜測是它是jquery 1.8.2和1.8.3之間的區別,但我可以同時運行兩個實例(粘滯插件需要1.8.3,其餘插件需要1.8.2)

+0

沒有下面的鏈接,我可以告訴你,無論是**這裏**。waypoint'不是你認爲它是什麼。 –

+0

只使用jQuery的一個版本,最好是最新的版本。如果需要,遷移需要它的插件:http://blog.jquery.com/2013/05/01/jquery-migrate-1-2-0-released/ –

+0

恩......你打算髮布一些代碼嗎?編輯:需要比這更多的代碼。在** my **代碼中,當問題實際上在其他地方時,我經常會遇到一個引用jquery庫中的一行的錯誤。這些都很難調試。 – sgroves

回答

3

老舊的一個優勢是,我第一次想到當我看到您的錯誤消息是「嗯...... $()的功能真的是你認爲的嗎?「 :-)

你看,jQuery的$()函數永遠不會返回nullundefined。如果你用這個名字叫它,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嗎?這兩者之間的區別是什麼導致兼容性問題?

+1

+1你是在現場!我發現這個鏈接在這個問題上非常有幫助:http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/ – acdcjunior

+0

感謝指針 - 這是'.noConflict( )'和相關問題。 –