Uncaught TypeError: Cannot read property 'top' of undefined

Fermé
mari0n - 20 nov. 2016 à 12:25
 mari0n - 21 nov. 2016 à 19:12
Bonjour,
J'utilise le code suivant qui me permet d'ajouter une class à un élément du menu lorsque celui-ci est au niveau de l'écran de l'internaute :
$(document).ready(function () {
    $(document).on("scroll", onScroll); 
});

function onScroll(event){
    var scrollPos = $(document).scrollTop();
    $('#nav-main a').each(function () {
        var currLink = $(this);
        var refElement = $(currLink.attr("href"));
        if (refElement.position().top <= scrollPos +55 && refElement.position().top + refElement.height() > scrollPos +55) {
            $('#mnav-main ul li a').removeClass("active");
            currLink.addClass("active");
        }
        else{
            currLink.removeClass("active");
        }
    });
}


Il fonctionne très bien, mais dans l'inspecteur chrome, j'ai l'erreur suivante :
"Uncaught TypeError: Cannot read property 'top' of undefined"

Savez-vous pourquoi cette erreur, alors que tout fonctionne bien ?

A voir également:

3 réponses

codeurh24 Messages postés 761 Date d'inscription samedi 29 mars 2014 Statut Membre Dernière intervention 8 septembre 2018 123
Modifié par codeurh24 le 20/11/2016 à 15:26
bonjour.
A mon avis tu doit te tromper, ton code ne fonctionne pas.
A partir de l'erreur que tu as, ce code js plante et ne vas pas plus loin que l'erreur.

cette ligne n'est pas normale pour moi
$(currLink.attr("href"));

elle appel un élément qui n'existe pas et donc qui n'as pas de position.

Tu devrais changer ta condition
if (refElement.position().top <= scrollPos +55 && refElement.position().top + refElement.height() > scrollPos +55) {

en
if (currLink.position().top <= scrollPos +55 && currLink.position().top + currLink.height() > scrollPos +55) {
0
Je doit préciser que j'ai importé la librairie JQuery :
https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js

Sans cela, le code ci-dessus ne fonctionne pas. Sinon il fonctionne bien sur mon site, que ce soit sur Chrome ou sur Safari, par contre dès que je scroll, la quantité d'erreurs augmente, celles affichées sont toute les mêmes : Uncaught TypeError: Cannot read property 'top' of undefined
-1