2016-09-20 2 views
1

ここでこのエラーを回避しようとしていますが、これは私にとって問題です...

基本的に、私は最初からオブジェクトとして変数を定義しています。オブジェクトにはjQueryを利用する関数がありますが、ページの読み込み中にオブジェクトのプロパティを設定する必要があります(これはjQueryドキュメントが準備される前に設定する必要があるようです)。

とにかく.jsファイルページの先頭に表示されます。

var MyObject = { 

    Property1 : null, 
    Property2 : null, 
    Property3 : null, 
    Property4 : 0, 

    Initialize: function() { 
     // Do some code in here... 
     if ($('#some-element').length) 
     { 
      MyObject.Property1 = $('#some-element').data('property'); 
      $('#some-element').click(MyObject.On_ClickProperty1); 
     } 


    }, 
    On_Click_Property1: function() { 
     alert('You Clicked ' + MyObject.Property1); 

     if (MyObject.Property2 !== null) 
      alert('Property2 = ' + MyObject.Property2); 
    } 
} 

jQuery(document).ready(MyObject.Initialize); 

これは非常に小さな例です。しかし、今、私は(体内の)どこかに実際のページにMyObject.Property2を設定し、それを更新したいと思います、とInitialize機能が実際にDocument.Readyまで実行されませんので、それは、正常に動作する必要があります。だから私は、私は.jsファイルをラップする場合、私は今取得問題は、...今 TypeError: $ is not a function

ページの読み込みである...ドキュメントのボディに

<script> 
MyObject.Property2 = 'This Is Property 2'; 
</script> 

をこのようなものを置きますそのような次のコードで:

(function($){ 
var MyObject = { 

    Property1 : null, 
    Property2 : null, 
    Property3 : null, 
    Property4 : 0, 

    Initialize: function() { 
     // Do some code in here... 
     if ($('#some-element').length) 
     { 
      MyObject.Property1 = $('#some-element').data('property'); 
      $('#some-element').click(MyObject.On_ClickProperty1); 
     } 


    }, 
    On_Click_Property1: function() { 
     alert('You Clicked ' + MyObject.Property1); 

     if (MyObject.Property2 !== null) 
      alert('Property2 = ' + MyObject.Property2); 
    } 
} 

jQuery(document).ready(MyObject.Initialize); 
})(jQuery); 

私はもはや、このエラーが表示されていない、しかし、MyObject.Property2が設定されていないとProperty2のアラートはnullを与えます。私は適切にこれを実現するにはどうすればよい

?私は$はTypeErrorを得ることはありません、と私はまだ(プロパティ関数内にないjQuery$を使用することができ、かつMyObject.Property2のアラートが現れる前に、私は実際にProperty2の値を設定することができるように?あなたはjqueryの無競合モードでロードされているよう

+2

正気を行うことができますチェック:jQueryライブラリは、このコードが実行時にロードされますか? (コンソールに404などはありません)。あなたのカスタム.jsファイルは、 ''セクションのjQueryライブラリの後にリストされます。 –

+0

はい、jquery.min.jsファイルがロードされた後、custom.jsファイルがすべて先頭に表示されます。また、MyObject.Property2を設定するインラインスクリプトはbodyタグ内にあります。最初のメソッドはエラーを返しますが、変数を適切に設定しますが、2番目のメソッドはエラーは発生しませんが、変数は設定されません。どちらの方法が正しいか? –

+0

これらのどちらも私の望む最終結果ではありません。私はそれが必要なものの半分しか持っていません...エラーはなく、変数を設定します... –

答えて

1

は思えます。 https://api.jquery.com/jquery.noconflict/ あなたが他のライブラリのための$を使用していない場合は、バックjqueryのに$を割り当てることができます。ヘッダの下にvar MyObjectの前に追加してください。

var $ = jQuery.noConflict(true); 

また、このスクリプトファイルをフッターに読み込むこともできます。ここで私はそれをやる方法です。 ヘッダーでは、空のオブジェクトをグローバルに初期化します。

var MyObject = {}; 

次に、あなたは

(function($){ 
    MyObject.property1 = null; 
    MyObject.Initialize = function() { 
    //your codes 
    } 
    //other lines here 
})(jQuery); 
+0

オブジェクトのプロパティである関数が多すぎます。私はあなたに小さな例を与えました。私はこれを自分のファイルの中に入れる必要があります。出力できません。 –

+0

.jsファイルにデフォルトを設定する必要がありますが、いくつかのプロパティを設定できる必要があります。ページレベルでオブジェクト上のオブジェクトをページレベルで更新する必要があります。どうすればいいですか? –

+0

'var $ = jQuery.conflict();'をtrueにしないで置いてください。他のすべてのスクリプトは壊れています。ありがとう:) –

関連する問題