我使用jquery v1.8作为我的模板,并且我使用的是Mura version6.1,当我试图加载任何页面时,我得到了上面的错误,它发生在$.extend(window,mura);这一行
显而易见的是,$是不可用的,但我不知道我应该做些什么来防止这种情况,因为这个代码是由mura在每个页面中动态添加到脚本标记中的东西,而不是一些我可以在jQuery之后通过加载来调整的库文件。
详细代码如下所示,采用includes/display_objects/html_head/global.cfm编写
var mura={
loginURL:"#variables.loginURL#",
siteid:"#variables.$.event('siteID')#",
siteID:"#variables.$.event('siteID')#",
context:"#variables.$.globalConfig('context')#",
jslib:"#variables.$.getJsLib()#",
assetpath:"#variables.$.siteConfig('assetPath')#",
themepath:"#variables.$.siteConfig('themeAssetPath')#",
htmlEditorType:"#variables.$.globalConfig('htmlEditorType')#",
rb:"#lcase(listFirst(variables.$.siteConfig('JavaLocale'),"_"))#",
#variables.$.siteConfig('JSDateKeyObjInc')#
}
$.extend(window,mura);我不希望做任何更改,比如用jQuery替换$,因为mura核心文件如果是自定义的,当升级时不会保留这些更改。我尝试用jQuery替换$,但有没有一种方法可以通过自定义我的模板文件或自定义的js文件来避免jQuery冲突,这样我就不必担心如果我升级Mura而那些核心文件被覆盖会发生什么。
发布于 2015-03-23 02:25:33
尝试像下面这样在你的jQuery代码中使用一个Immediately-Invoked Function Expression (IIFE),这将需要在你使用jQuery的任何地方完成,但它将确保没有冲突:
var $ ='blah'; // assign $ to something other than jQuery, like in your enviroment
try{
alert( $('#test').val() ); // this would break as 'blah' doesnt have a .val() function
}
catch(err){
alert('$ is not jQuery in this scope');
}
(function($) {
// inside this scope $ will allways be jQuery, even if $ is something else out in the wild
alert( $('#test').val()+'\n\n This works because $ is protected in this scope' );
})(jQuery); //pass jQuery in as the parameter of this IIFE
// see http://stackoverflow.com/questions/11403266/understanding-vs-jquery-in-iife-instead-of<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="test" value="working"/>
发布于 2015-03-23 10:07:40
我见过当开发人员试图在文档的<head>部分以外的其他地方引用jquery.js时(例如,在结束</body>标记之前),就会发生这种情况。因此,请确保在文档的<head>部分加载了jQuery。是的,Mura会在结束的</head>标签之前添加它的JS,但是只要你对jquery.js的引用在那里,你就不会遇到这个问题。
如果这不是问题所在,那么我会有兴趣看到一个链接,或者至少是一个页面的完全呈现的html。
https://stackoverflow.com/questions/29196761
复制相似问题