2017-08-17 46 views
0

我正在精簡大量的jQuery代碼,我想要做的第一件事是全局設置函數,以便它們可以跨範圍使用和重用。一個功能是相等的高度設置爲元素,以最高的元素:jQuery函數不會全局讀取屬性

function setEqHeight(cont, classname) { 

    var maxHeight = 0; 
    $(cont).each(function(){ 
     var prodName = $(classname,this); 
     $(prodName).each(function(){ if ($(this).height() > maxHeight) { maxHeight = $(this).height(); } }); 
     $(prodName).height(maxHeight); 
    }); 

} 

而且我運行它像這樣

setEqHeight('.containername','.classname'); 

這個工作,只要我打電話內外$j(document).ready(function($) { }); 但我想要在全局範圍內設置該功能,在文檔之外準備好,並調用裏面的功能。

當我將函數設置在文檔就緒範圍之外並在範圍內調用它時,出現Uncaught TypeError: Cannot read property 'each' of null錯誤。就像它無法再讀取'containername'一樣。我很困惑,我做錯了什麼?編號:jsFiddle here。它確實在那裏正常工作,這引出了爲什麼它不在生產環境中的問題

+0

請問你可以做一個jsfiddle ..你的代碼沒有問題,它應該像你說的那樣正常工作 –

+0

你在傳遞什麼.containername是div或table的名字? – jANVI

+0

jsFiddle加入;它確實在那裏工作.. –

回答

0

我找到了this answer的罪魁禍首。我認爲這與腳本運行的確切環境有關; Magento的。 Magento並沒有很好地適應jQuery,因此我將這個函數中的美元符號改爲jQuery。

function setEqHeight(cont, classname) { 

    var maxHeight = 0; 
    jQuery(cont).each(function(){ 
     var prodName = jQuery(classname,this); 
     jQuery(prodName).each(function(){ if (jQuery(this).height() > maxHeight) { maxHeight = jQuery(this).height(); } }); 
     jQuery(prodName).height(maxHeight); 
    }); 

} 

現在它工作正常。謝謝大家一起思考。