2014-04-14 25 views
-1

我發現了以下定義如何通過Javascript中的「fn」成員來定義函數?

$.fn.flex = function (options) { 
    var p = this.data("flex"), 
      opts = options || {}; 
    if (p) return p; 
    this.each(function() { 
     p = new Flex(this, opts); 
     $(this).data("flex", p); 
    }); 
    return opts.api ? p : this; 
}; 

,其限定在原來的代碼功能flex()

不幸的是,它在我的環境中停止定義這個函數,即函數調用導致一個錯誤,flex不是函數。

flex是一個函數,這裏至關重要嗎?

UPDATE

對不起,其實我並沒有做任何修改。我只是把這個JavaScript https://github.com/jasonenglish/jquery-flex/到我的環境(的Liferay)和代碼運行腳本

<script type="text/javascript"> 
    $(function() { 
     $(".flex").flex(); 
    }); 
    </script> 

導致了錯誤。因此,我像以前那樣將$更換爲jQuery,但仍然無法正常工作。

更新2

嗯。來自Twitter的widget.js發生錯誤。說

TypeError: jQuery(...).flex is not a function 

如果我重新命名flex到flex1無處不在,它說「flex1」不是一個函數。

+0

@Dims,你可以發佈你的修改版嗎? –

+0

@ T.J.Crowder,如果沒有定義,它就成爲全局對象。或者我錯了? –

+0

@AmitJoki:全局*變量*(不一定是指對象),是的,除非你使用嚴格模式,這使得它應該是錯誤的。 –

回答

2

對不起,實際上我沒有修改任何東西。我只是把這個JavaScript ...到我的環境(的Liferay)和代碼運行腳本

因爲這是一個jQuery插件,你需要確保你包括腳本 jQuery的網頁上。所以

<script src="/path/to/jquery.js"></script> 
<script src="/path/to/the-plugin.js"></script> 

如果你把它們放在另外的順序,第一個腳本將失敗,因爲它會嘗試走jQuery符號,它還不存在的價值,扔ReferenceError(在寬鬆嚴格模式)。

+0

訂單正確 – Dims

+1

@Dims:然後插件的代碼沒有運行,或者jQuery第二次加載,稍後。如果你加載jQuery兩次,第二個副本將覆蓋第一個,並且在第一個註冊的插件不再註冊(因爲它們註冊的副本已經消失)。 –

2

首先在$.fn.flex$fn是jQuery變量。它們不是JavaScript原生的。 $.fn由jQuery提供的將方法/屬性附加到jquery對象上

+0

你確定嗎?函數以';(function($,undefined){use,strict'; ...')開頭;這不會使$是一個局部變量嗎? – Dims

+0

@Dims它取決於傳入的內容作爲第一個參數這個函數 – Anoop

+0

@Dims:'$'是一個參數(*有效的是一個局部變量)。在插件代碼的末尾,你會看到它傳遞'jQuery'作爲參數。這是一個相當標準的插件成語,它不應該依賴全局'''符號,只是全局'jQuery'符號。 –

相關問題