0

CodeCanyon で購入した Textify という jQuery プラグインを実装しようとしています。

Textify には jQuery が必要です。Shape5 の Vertex フレームワークを使用して、このプラグインを Joomla 2.5 環境に実装しています。

プラグインをサイトに統合した後、「'undefined' は関数ではありません」というエラーが 5 件発生します。

開発サイトはhttp://sosdivorce.ergonomiq.netにあります。

Textify は商用製品なので、スクリプトをオンラインに投稿するのは気が進まない。

私が得ている特定のエラーは次のとおりです。

Error in file: http://sosdivorce.ergonomiq.net/templates/shape5_vertex/js/multibox/overlay.js

    Type Issue
    'undefined' is not a function (evaluating '$(window).addEvent('resize',function(){s5_resize_overlay();});')

Error in file: http://sosdivorce.ergonomiq.net/templates/shape5_vertex/js/s5_info_slide.js

    Type Issue
    'undefined' is not a function (evaluating '$(window).addEvent('resize',function(){s5_is_tobind();});')

Error in file: http://sosdivorce.ergonomiq.net/templates/shape5_vertex/js/s5_responsive_mobile_bar.js

    Type Issue
    'undefined' is not a function (evaluating '$(window).addEvent('resize',s5_responsive_mobile_login_register);')

Error in file: http://sosdivorce.ergonomiq.net/templates/shape5_vertex/js/s5_columns_equalizer.js

    Type Issue
    'undefined' is not a function (evaluating '$(window).addEvent('resize',s5_load_resize_columns);')

Error in file: http://sosdivorce.ergonomiq.net/templates/shape5_vertex/js/s5_flex_menu.js

    Type Issue
    'undefined' is not a function (evaluating '$(this.options.id).getElements('li, span.grouped_sub_parent_item');')

どうすればこれを調査できますか?

4

3 に答える 3

3

jQuery と Mootools はどちらも、ライブラリのショートカットとして $ 記号を使用します。私のアドバイスは、jquery コードを調べて $ 変数を置き換え、それが違いを生むかどうかを確認することです。したがって、たとえば、次を使用してjqueryライブラリを呼び出すとすぐに、jQueryの$エイリアスを完全に無効にすることができます

// Disable the $ global alias completely
jQuery.noConflict();

そして、jQueryスクリプトの場合は使用します

(function($){

// set a local $ variable only available in this block as an alias to jQuery
... here is your jQuery specific code ...

})(jQuery);

安全のために、mootools スクリプトに対しても同じようなことを行います。

(function($){

// set a local $ variable only available in this block as an alias 
// to Mootools document.id
... here is your Mootools specific code ...

})(document.id);

これらをホスティングしているため、これらをスクリプトに追加する必要がある場合があります。


編集:

あなたが行った方法でスクリプトを編集しても問題はありません。実際のベストプラクティスは、Joomla noConflict() を念頭に置いてプラグインを設計することです!

通常、物事をより複雑にする CDN ホスティングでは、次のような方法で jQuery を追加します。

<script src="PATH TO GOOGLE ETC" type="text/javascript" />
<script type="text/javascript">
    jQuery.noConflict();
</script>
<script src="PATH TO SCRIPTS" type="text/javascript" />

joomla サイトでのこれに関する問題は、joomla が最初にすべてのファイル スクリプトをロードしてから、手書きのスクリプトを追加することです。それらを追加する順序に関係なく、つまり、次のようにロードされます

<script src="PATH TO GOOGLE ETC" type="text/javascript" />
<script src="PATH TO SCRIPTS" type="text/javascript" />
<script type="text/javascript">
    jQuery.noConflict();
</script>

逆に差し込んでもOK!したがって、それを jQuery ファイル自体に挿入する、やや見苦しく、あまり適切にコーディングされていない方法を提案しました。jQuery ファイルをローカルでホストすることをお勧めします。これはこれまでで最もきれいな方法ではありませんが、最も理想的な方法でもありませんが、Joomla でこの厄介な事実を回避する唯一の方法です。jQuery.noConflict();ただし、jQuery プラグインをロードする前に jQuery の下に手動で追加できる場合は、これがはるかに優れた方法です。

于 2012-11-05T15:03:52.803 に答える
0

Did you try using jQuery.moConflict(); something like below:

<script>

      jQuery.noConflict();

// Use jQuery via jQuery(...)

      // Use Prototype/Mootools with $(...), etc.

    </script>
于 2012-11-05T14:49:36.257 に答える
0

私がしたことは、ヘッダーのインクルード ファイルで次のコードを置き換えたことです。

<!-- jQuery Scripts -->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>

<!-- Textify Scripts -->
<script type="text/javascript" src="<?php echo $s5_directory_path ?>/js/textify-min.js"></script>  
<script type="text/javascript">  
    $(document).ready(function (){    
      //Usage  
      $(".longText").textify();     
    });   
</script>

このコードで:

<!-- jQuery Scripts -->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
    jQuery.noConflict();
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>

<!-- Textify Scripts -->
<script type="text/javascript" src="<?php echo $s5_directory_path ?>/js/textify-min.js"></script>  
<script type="text/javascript">  
    jQuery(document).ready(function (){    
      //Usage  
      jQuery(".longText").textify();     
    });   
</script>

ジョージ、追加すべきだとあなたは言った

(function($){

上部と

})(jQuery);

すべてのjQueryプラグインの一番下にあり、追加する必要があります

jQuery.noConflict();

メインの jQuery ファイルの下部にあります。

私がやったことはうまくいっているようですが、おそらくそれは最善の方法ではありません。

また、どのように追加しますか

jQuery.noConflict();

CDN でホストされている jQuery のコピーに?

于 2012-11-05T16:40:47.387 に答える