2012-04-21 13 views
1

私は複数のJSフレームワークを実行していて、内容は単に要素テキストを変更するものがあるonClick="changeText()"です。私のスクリプトで私が持っているJquery No Conflict - Onclick関数 - 複数のフレームワーク

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

私はJquery.ready機能がすべてそれを捨てていると信じています。私のデバッガでは、私のchangeText()関数が見つからないことを教えています。スクリプトは100%読み込み中です(私はビュー経由で見ることができます:ソース - > jsリンク)。また、それが私の他のフレームワークとしてロードされてMootoolsでJoomla 1.5を実行している違いがある場合。

私はJquery.ready関数なしで標準のhtmlページでそれらを正常に実行できるので、関数が100%正しいことも知っています。

これを呼び出すファイルを指定する方法はありますか?あなたのjqueryのスクリプトタグを使用すると、関数内でjQueryをラップすることができます$ jの

答えて

1

var $j = jQuery.noConflict(); 

。ちなみに、$は、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を使用してイベントハンドラをアタッチする方が良いでしょう。

+0

これは私のために働きました。 –

3

にjQueryの変数を変更します直後the documentationから

+0

O.K.私が関数を呼び出すと、jqueryを調べる方法をどのように知ることができますか? –

+0

イベントを処理するには、インラインJavaScriptの代わりにイベント添付ファイルを使用することをお勧めします。また、関数は 'ready()'のような関数で囲まれているので、インラインイベントを使うことはできません。彼らはもはやグローバルな範囲ではありません。私は収容するために私の答えを更新しました。 – Joseph

+2

彼はすでにラッピングをしています。 DOM準備完了イベントは既にjQueryオブジェクトを渡しているので、関数内で$をjQueryにマップするために使用できます。その周りに別の関数は必要ありません。彼がする必要があることは、関数をグローバルにすることです(または、インラインイベントを使用する代わりに、javascriptを使用してイベントを追加することをお勧めします) – ThiefMaster

0

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

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

window.changeText = function() { 
    // ... 
}; 
関連する問題