Uncaught TypeError: Cannot read property 'top' of undefined

mari0n -  
 mari0n -
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 760 Date d'inscription   Statut Membre Dernière intervention   123
 
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
mari0n
 
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