2017-06-20 48 views
0

我得到的?(」 flexNav)‘在多數民衆贊成初始化flexNav與此對象的自定義文件遺漏的類型錯誤’:

function setupFlexnav() { 
// flexnav setup and options 
//var isIE = false || !!document.documentMode; 
//if (!isIE) { 
    $(".flexnav").flexNav({ 
    'animationSpeed': 0, 
    'transitionOpacity': false, 
    'buttonSelector': '.menu-button', 
    'hoverIntent': true, 
    'hoverIntentTimeout': 100, 
    'calcItemWidths': false, 
    'hover': true 
}); 
//} 

//other custom code follows, but error is thrown on $(".flexnav").flexNav 
} 
//initialize flexnav 
$document.ready(function() { 
    setupFlexnav(); 
}); 

'setupFlexNav()'方法在這個文件中的其他地方被調用,並且封裝在$ document.ready(){...}中,這應該停止調用flexNav()直到jQuery被加載。 BundleConfig在我的jquery.flexnav-custom.js腳本之前加載了jQuery-1.10.2.js,但在這兩個文件之後加載了一個jQuery-1.11.3.js文件。

我想知道是否加載2個版本jQue在同一頁面上會導致「未捕獲的類型錯誤」被拋出,但是這個代碼在源代碼管理中沒有改變6個月。直到今天,我還沒有收到這個flexNav()錯誤,所以除了flexnav的初始化之外,其他的東西一定會導致錯誤。我只是不知道有什麼。什麼會導致我的代碼開始拋出這個錯誤?謝謝!

+2

是的,加載多個版本的jQuery可能會導致衝突 - 但是,您的錯誤消息給我的印象是flexNav()在加載插件之前調用。如果你將它包裝在一個jQuery就緒語句中,並且仍然出現這個錯誤,那麼打開你的控制檯並在控制檯中輸入flexNav(),然後按回車。你應該得到一個包含flexNav()對象的對象。如果你沒有,那麼你的插件腳本沒有加載。 – Korgrue

+0

實際上,在'noConflict'模式下,可以在頁面上加載兩個版本的jQuery。但是你得到的錯誤與此無關。它只是說在你嘗試運行'flexNav()'函數的時候,它還沒有定義。它在插件內部被定義,當你加載它。所以你需要先加載插件,然後調用函數。實現它的最簡單方法是將函數封裝在'$(window).load(function(){/ * code here * /})'wrapper中。 '$(document).ready()'發生得更早,並且您的插件尚未加載。不過,它會被加載到'$(window).load()'上。 –

+0

@AndreiGheorghiu:我仔細檢查了我的BundleConfig.cs文件,我先加載jQuery,接着是2個flexnav腳本,然後是自定義文件(main.js),它具有上述代碼。我將'$ document.ready'改爲'$(window).load(function(){setupFlexnav();});',並且我仍然得到'$(...)flexNav不是一個函數'錯誤。 – SammyPayne

回答

0

再次查看我的代碼後,我意識到我的腳本的順序確實導致了問題。舊版本的jQuery(1.10.2)在jquery.flexnav-custom.js之前加載,這很好,但在這些腳本之後加載了新版本(1.11.3)。我省略了舊文件,在flexnav腳本之前加載了較新的文件,並重建了項目。錯誤消失了。

相關問題