2017-06-20 21 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脚本之前加载了较新的文件,并重建了项目。错误消失了。

相关问题