2017-08-17 1 views
0

Je suis en train de rationaliser beaucoup de code jQuery, et la première chose que je veux faire est de définir des fonctions globalement pour qu'elles puissent être utilisées et réutilisées sur l'ensemble de la portée. Une fonction est pour le réglage des hauteurs égales aux éléments, en fonction de l'élément le plus élevé:La fonction jQuery ne lit pas les propriétés globalement

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); 
    }); 

} 

Et je lance comme si

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

Cela fonctionne, aussi longtemps que je l'appelle à la fois à l'intérieur $j(document).ready(function($) { }); Mais je vouloir définir la fonction globalement, en dehors du document prêt, et appeler la fonction à l'intérieur.

Lorsque je définis la fonction en dehors de la portée de document prêt et l'appel à l'intérieur de la portée, j'obtiens l'erreur Uncaught TypeError: Cannot read property 'each' of null. Comme il n'est plus capable de lire le 'nom de fichier'. Je suis perplexe, qu'est-ce que je fais mal?

Édition: jsFiddle here. Il fonctionne correctement là-bas, ce qui soulève la question pourquoi il ne fonctionne pas dans l'environnement de production

+0

pouvez-vous faire un jsfiddle s'il vous plaît .. il n'y a rien de mal avec votre code, il devrait fonctionner correctement comme vous l'avez dit –

+0

Que transmettez-vous. Nom_contenu est-il le nom de la div ou table? – jANVI

+0

jsFiddle ajouté; ça marche vraiment là .. –

Répondre

0

J'ai trouvé le coupable dans this answer. Je pense que cela a à voir avec l'environnement exact du script; Magento. Magento ne s'accorde pas bien avec jQuery, donc j'ai changé les signes dollar de la fonction en jQuery comme ça;

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); 
    }); 

} 

et maintenant il fonctionne correctement. Merci à tous pour votre réflexion.