10

モジュールにはjqueryを使用します。私のjoomlaテンプレートには統合されたjqueryメニューがあります。したがって、それらは互いに競合します。

この問題を解決する方法はありますか?モジュールのスクリプトコードに従う

<script type="text/javascript" charset="utf-8">
    window.onload = function () {
        var container = jQuery('div.sliderGallery');
         var ul = jQuery('ul', container);

         var itemsWidth = ul.innerWidth() - container.outerWidth();

         jQuery('.slider', container).slider({
             min: 0,
             max: itemsWidth,
             handle: '.handle',
             stop: function (event, ui) {
                 ul.animate({'left' : ui.value * -1},340);
             },
             slide: function (event, ui) {
                 ul.css('left', ui.value * -1);
             }
         });
     };
</script>
4

5 に答える 5

4

問題を解決するために必要なことは、jQuery 関数のエイリアスを解除し、それを別の変数名に割り当てることです (覚えておいてください: 変数は関数にすることができます)。jQuery.noConflict()関数のエイリアスを解除するには、関数を使用する必要があり$()ます。ここにそれを行うための1つ:

// ...after all of Joomla's JS is done executing...

// before loading your version of jQuery var jquery = {}; // aka new Object()
jquery.joomla = jQuery.noConflict(); // moves jQuery into another namespace

// load your version

これで、バージョンをロードすると、jQuery と名前空間が引き継がれ$ますが、必要に応じて、Joomla の jQuery 関数への他の参照がまだ残っています。繰り返しますが、基本的な流れは次のとおりです。

  1. Joomla の jQuery を読み込む
  2. Joomla の jQuery 依存コードを実行する
  3. Joomla jQuery を別の名前空間に移動する
  4. jQuery を読み込む
  5. を使用してコードを実行します$()
于 2009-07-21T15:20:48.023 に答える
2

try

var J = jQuery.noConflict();

after that use J variable instead of $ or jQuery for your custom code

于 2009-07-21T15:11:51.753 に答える
1

試す

jQuery.noConflict();

例えば

<script type="text/javascript" charset="utf-8">
    $(document).ready(function () {
        var container = jQuery('div.sliderGallery');
         var ul = jQuery('ul', container);

         var itemsWidth = ul.innerWidth() - container.outerWidth();
         jQuery.noConflict();
         jQuery('.slider', container).slider({
             min: 0,
             max: itemsWidth,
             handle: '.handle',
             stop: function (event, ui) {
                 ul.animate({'left' : ui.value * -1},340);
             },
             slide: function (event, ui) {
                 ul.css('left', ui.value * -1);
             }
         });
     });
</script>

ロードされたドキュメントをチェックするためにjQueryを使用するようにコードを更新しました。noConflict関数の使用方法の詳細はこちらです。

于 2009-07-21T15:13:40.910 に答える
0

joomlaが2種類のjqueryを同時にロードしたということですか?最初にメニューがjqueryをロードし、次にモジュールがjqueryをロードしますか?

ここに解決策があります: joomla テンプレートでは、モジュールまたはコンポーネント ビューをオーバーライドできます (joomla 1.5.x を使用している必要があると思いますよね?)

  1. テンプレートに html/ というディレクトリを作成します。例: templates/yourTemplate/html/

  2. modules/mod_yourMenu/tmpl/.* からテンプレート html (templates/yourTemplate/html/mod_yourMenu/) にファイルをコピーします --> * tmpl/ を追加する必要はありません *

  3. 内部のphpファイルを編集し、jqueryをロードするすべてのタグを削除します

  4. jquery を使用するモジュールに対して、手順 1 ~ 3 を実行します。

  5. テンプレートを編集し、最新バージョンの jquery をロードするタグを付けます。

今すぐ動作するはずです:)

于 2009-07-21T15:42:15.873 に答える
0

jqスクリプトを自己呼び出し関数でラップするだけです。

(function($){
   $(document).ready(function(){

      $('div').click( function(){ alert('ding'); });

   });
})(jQuery);

これによりプライベート スコープが作成されるため、衝突を心配する必要はありません。jQuery.noConflict(); を使用すると、すべての不安をスキップできます。解決策であり、その素晴らしい $ をあきらめる必要はありません! 動作中のコードの他のチャンク (たとえば、任意の cms) があることがわかっている場合は、これを慣れの問題として行います。テスト後に新しい拡張機能が追加されたとしても、jQuery が壊れることはありません。

jQuery クックブック (http://listic.ru/jQuery_Cookbook.pdf - 1.17 章) に優れた概要があります。レシグにとってそれで十分であるなら、私にとってはうまくいくと思います!

于 2012-01-25T18:42:23.153 に答える