2016-09-20 51 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); 

這是一個很小的例子。但是現在我想在實際頁面的某個位置(在Body中)設置MyObject.Property2並更新它,並且應該可以正常工作,因爲Initialize函數直到Document.Ready纔會真正運行。所以我把這樣的事情在文檔的身體......

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

我現在得到的問題是一個頁面加載... TypeError: $ is not a function

現在,如果我換行.js文件用下面的代碼如下所示:

(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警報給空。

我怎樣才能做到這一點正常嗎?所以,我沒有得到$類型錯誤,我仍然可以使用$(NOT jQuery物業職能範圍內),而我居然能之前MyObject.Property2的警報顯示了設置的Property2的價值?

+2

完整性檢查:是jQuery庫加載這段代碼運行的時間? (在控制檯中沒有404s等)。您的自定義.js文件應列在「」部分中的jQuery庫之後。 –

+0

是的,custom.js文件在jquery.min.js文件加載後列出,全部在頭部。用於設置「MyObject.Property2」的內聯腳本位於body標籤內。第一種方法給出錯誤,但正確設置變量,而第二種方法不給出錯誤,但不設置變量。這裏哪種方法是正確的? –

+0

這些都不是我想要的最終結果。這兩個只有我需要做的一半...沒有錯誤,並設置變量... –

回答

1

好像你已經jQuery的,在不衝突模式加載。 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();'沒有真正做到了這一點。所有其他腳本都會中斷。謝謝 :) –

相關問題