【问题标题】:Mura 6.1 $ is undefinedMura 6.1 $ 未定义
【发布时间】:2015-05-25 15:31:29
【问题描述】:

我使用 jquery v1.8 作为我的模板,并且我使用的是 Mura 6.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 和那些核心文件会被覆盖。

【问题讨论】:

  • 您是否在尝试使用它的文件之前加载 jQuery?
  • 是的,这正是正在发生的事情,但问题是 Mura 在 <head> 标签结束之前和末尾添加了该文件代码。现在还有其他文件正在由 mura 恰好在 $.extend 代码之前呈现,即 global.min.js 如果我尝试在 $.extend 代码之后加载 jquery.js ,则 jQuery 是未定义的。

标签: jquery mura


【解决方案1】:

当开发人员试图在文档的<head> 部分以外的地方引用 jquery.js(例如,在结束 </body> 标记之前)时,我已经看到这种情况发生。所以,请确保你有 jQuery加载到您文档的<head> 部分。是的,Mura 将在结束 </head> 标记之前添加其 JS,但只要您对 jquery.js 的引用存在,您就不应该遇到此问题。

如果这不是问题,那么我有兴趣查看发生这种情况的链接,或者至少是发生这种情况的页面的完全呈现的 html。

【讨论】:

  • 当您在页面请求中多次加载 jQuery 时,我也看到过这种情况。检查您的源代码并确保只有一个 jQuery 库脚本实例。 (jquery.min.js 等)
  • 感谢您的回复,但是当我遇到 jQuery 冲突时,我检查了第一件事,据我所知,它只加载了 1 个 jQuery。我将更新我的问题以显示页面源代码。
  • 我已添加页面源以帮助调试问题。我的 jquery 文件位于 html_head 中。由于字数有限,我无法粘贴<body> 来源。但所有这些都没有任何 jQuery 代码。我粘贴了<head><footer>
  • @user2067888,检查您的主题的 contentRenderer.cfc 并查看您是否在某处 this.jsLibLoaded = true; 有此行,如果没有,请添加它。此外,如果有公共 URL,我也很乐意仔细查看。
  • 是的 this.jsLibLoaded = truecontentRenderer.cfc 文件中。我正在处理的网站尚未上线,因此没有这样的公共 URL。有什么办法可以从上面的页面源调试它?
【解决方案2】:

尝试在您的 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"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多