1

複数の JS フレームワークを実行しておりonClick="changeText()"、要素のテキストを変更するだけのコンテンツを含むものもあります。私のスクリプトでは

jQuery(document).ready(function($){
     function changeText(){
         $('#test').text('Hello World!');
     }
});

Jquery.ready関数がすべてを捨てていると思います。私のデバッガーではchangeText()、スクリプトが 100% 読み込まれている関数が見つからないことがわかります (view:source -> js リンクで表示できます)。また、違いが生じる場合は、他のフレームワークとして Mootools をロードして Joomla 1.5 を実行しています。

また、Jquery.ready 関数を使用せずに標準の HTML ページで正常に実行できるため、関数が 100% 正しいこともわかっています。

これを呼び出すファイルを指定する方法、またはこれを回避する「ハッキー」な方法はありますか?

4

3 に答える 3

3

関数でラップできjQueryます。ちなみに、はjQuery の実際の名前空間の$単なるエイリアスです。jQuery全体として、次のようになります。

(function($){
   $(function(){

       //do regular jQuery as needed

       function changeText(){                //your function
           $('#test').text('Hello World!');
       }

       $('element').on('click',function(){   //onclick handler
           changeText();
       });

   });
}(jQuery));

@ThiefMasterがコメントしたように、あなたはすでに使用jQueryして提供し$ているので、私のラッピングを破棄することができます.

<button onclick="doSomething()">追加するには、グローバル名前空間にあるイベントのみをトリガーするなどのインライン イベントを追加します。関数を jQuery でラップすると、グローバル名前空間の一部ではなくなります。ラップされたコード内から、代わりに JS を使用してイベント ハンドラーをアタッチすることをお勧めします。

于 2012-04-21T10:27:22.970 に答える
1

ドキュメントから、

var $j = jQuery.noConflict();

jquery スクリプト タグが jQuery 変数を $j に変更した直後

于 2012-04-21T10:22:57.667 に答える
0

最適なオプションは、インライン イベントをまったく使用しない$('selector').on('click', function() { ... })ことです。代わりに使用してください。

何らかの理由でそれができない場合でも、インライン イベントを使用できます。ただし、別の関数内で関数を定義しているため、それらをグローバルにする必要があります。これを行うには、ブラウザ環境でグローバル オブジェクトwindowであるオブジェクトにそれらを追加します。

window.changeText = function() {
    // ...
};
于 2012-04-21T10:45:35.583 に答える