web-dev-qa-db-fra.com

JS chargé à partir du modèle ne s'exécutera pas dans un composant personnalisé

J'ai créé une position de module sur mon modèle où je charge un module personnalisé qui est une barre de menus.

avec le prochain script je change sa position en fixed si quelqu'un fait défiler plus que 200px pour que la barre soit toujours au top.

jQuery(window).scroll(function(e){ 
  var jQueryel = jQuery('.fixedElement'); 
  var isPositionFixed = (jQueryel.css('position') == 'fixed');
  if (jQuery(this).scrollTop() > 200 && !isPositionFixed){ 
    jQuery('.fixedElement').css({'position': 'fixed', 'top': '0px'}); 
    jQuery('.fixedElement').addClass("bgNormal");

  }
  if (jQuery(this).scrollTop() < 200 && isPositionFixed)
  {
    jQuery('.fixedElement').css({'position': 'absolute', 'top': '0px'}); 
    jQuery('.fixedElement').removeClass("bgNormal");
  } 
});

J'ai ajouté ce script dans la tête du modèle. Tout se passe bien dans toutes les pages, à l'exception du views d'une personnalisation component que j'ai créée.

La console ne génère aucune erreur et en inspectant le code source, je peux constater que le script est chargé correctement. Pour une raison quelconque, il ne fonctionnera tout simplement pas.

jQuery est correctement chargé et je ne peux penser à rien qui puisse affecter la vue pour exécuter le fichier js.

J'ai téléchargé un autre component et j'ai constaté qu'il ne lancerait pas le script non plus.

Est-ce un problème commun ? Dois-je faire quelque chose pour charger des scripts à partir d'un modèle à afficher? Ou c'est un problème de développement?

1
IseNgaRt

Ok, après beaucoup de recherches, j’ai découvert qu’il s’agissait principalement d’un problème de CSS.

$(window).scroll() ne déclencherait pas car le #content div recevait une règle aléatoire qui ne le laisserait pas overflow.

Donc, $(window) ne défilerait pas, quoi qu'il arrive.

Cela a fonctionné comme un charme!

0
IseNgaRt

Pour certains composants personnalisés, il a été nécessaire d'ajouter une fonctionnalité "wrapper" aux fichiers js dans les vues pour qu'ils fonctionnent correctement.

Étant donné que vous rencontrez uniquement des problèmes avec le script dans la section des composants personnalisés, le chargement des scripts par le composant peut être conflictuel, par opposition à la façon dont Joomla Core gère les scripts.

<script type="text/javascript">
    (function ($) {
        $(document).ready(function () {
            $(window).scroll(function(e){ 
                var jQueryel = jQuery('.fixedElement'); 
                var isPositionFixed = (jQueryel.css('position') == 'fixed');
                if ($(this).scrollTop() > 200 && !isPositionFixed){ 
                    $('.fixedElement').css({'position': 'fixed', 'top': '0px'}); 
                    $('.fixedElement').addClass("bgNormal");

                }
                if ($(this).scrollTop() < 200 && isPositionFixed)
                {
                    $('.fixedElement').css({'position': 'absolute', 'top': '0px'}); 
                    $('.fixedElement').removeClass("bgNormal");
                } 
            });
        });

    })(jQuery);
</script>
0
NJA