2014-09-23 93 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(函數(){