2014-09-23 131 views
0

我试过在网上搜索,但仍然无法理解为什么我的jQuery函数不能在Joomla中工作。Joomla 3和自定义jQuery函数 - 未定义函数

所以,我有OrionMenu,我想融入我的Joomla 3

作为一个独立的这个菜单的伟大工程,而是试图将其加载到之后的Joomla - Chrome浏览器的控制台说我每次翻身时菜单:

Uncaught TypeError: undefined is not a function jquery-1.10.1.min.js:4 
(anonymous function) jquery-1.10.1.min.js:4 
n.event.special.(anonymous function).handle jquery.min.js:3 
n.event.dispatch jquery.min.js:3 
r.handle jquery.min.js:3 

搜索后,我发现的Joomla加载它自己的jQuery在noconflict模式,所以我试图整合OrionMenu的其他方式,而现在它说:

Uncaught TypeError: undefined is not a function (index):47 
(anonymous function) (index):47 
c jquery-1.10.1.min.js:4 
p.fireWith jquery-1.10.1.min.js:4 
x.extend.ready jquery-1.10.1.min.js:4 
q 

我的索引文件的第47行是:

jQuery(document).ready(function() { jQuery().orion({speed: 500}); }); 

我原来OrionMenu包括是这样的:

<link href="templates/<?php echo $this->template; ?>/menu-orion/css/styles.css" rel="stylesheet"> 
<script type="text/javascript" src="templates/<?php echo $this->template; ?>/menu-orion/js/jquery-1.10.1.min.js"></script> 
<script type="text/javascript"> 
     var $j = jQuery.noConflict(); 
     // $j is now an alias to the jQuery function; creating the new alias is optional. 
     $j(document).ready(function() { $j().orion({speed: 500});}); 
</script> 

读我改变了它在网络上的一些东西后,已经提到的一段代码,返回一个控制台错误 - 索引线上的未定义函数47

我以某种方式相信Joomla的这段代码打破了一切。

<script type="text/javascript"> 
    jQuery(window).on('load', function() { 
       new JCaption('img.caption'); 
    }); 
    </script> 

但不管怎么说,帮助将是惊人的:)如果你知道如何实现或者什么大概可能是错jQuery(document).ready(function() { jQuery().orion({speed: 500}); });将是巨大的。

在此先感谢!

+0

@Patrick埃文斯 - 是的,我加载它们只是标签 – mrGott 2014-09-23 18:14:37

+0

之前你还在包括一个单独的jQuery文件意味着额外的一到一个的Joomla包括 – 2014-09-23 18:18:00

+0

@Patrick埃文斯? - – mrGott 2014-09-23 18:20:32

回答

3

好吧,请确定您是而不是加载您自己的jQuery副本。您可以使用预先包装在Joomla中的版本。下面的代码将确保它的进口只有一次,在noConflict模式:

<?php 
    JHtml::_('jquery.framework'); 
?> 

随时随地把上面的代码在你的模板,最好朝着顶部,所以你知道它在哪里。

然后尝试使用Joomla内置的方法来定制JS添加到头部像这样:

$doc = JFactpry::getDocument(); 
$orion = ' jQuery(document).ready(function() { 
       jQuery().orion({ 
        speed: 500 
       }); 
      }); 
     '; 
$doc->addScriptDeclaration($orion); 

你可以把这段代码前面的代码中,我提到如果您使用的是Joomla导入jQuery的

+0

我已经尝试过这个,但没有奏效。我将这段代码放在HTML标签之前,其余的声明为$ app = JFactory :: getApplication(); $ doc = JFactory :: getDocument(); $ user = JFactory :: getUser(); $ this-> language = $ doc-> language; $ this-> direction = $ doc-> direction; – mrGott 2014-09-23 19:06:39

+0

嗯,我不太确定。这是很难说,没有被测试它 – Lodder 2014-09-23 19:13:06

+0

这解决了我的问题。重要的是通过其文本含义为“jQuery(document).ready(function()....”来重新表示“$(document).ready(function()....”中的美元符号。 – Samsky 2015-04-14 22:04:15

0

下方使用: JHtml :: _('jquery.framework'); 加载jQuery,但确保不加载其他jQuery版本,并非常重要的记住,在你自己的jQuery脚本中,你必须改变所有$与jQuery例如: $(function(){... 成为 的jQuery(函数(){