最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - uncaught TypeError: Cannot read property 'classList' of null - Stack Overflow

programmeradmin1浏览0评论

Hi Im trying to make a shrinking header, I almost have it working however i keep getting the above error for this section of the js files

var cbpAnimatedHeader = (function() {

var docElem = document.documentElement,
    header = document.querySelector( '.cbp-af-header' ),
    didScroll = false,
    changeHeaderOn = 300;

function init() {
    window.addEventListener( 'scroll', function( event ) {
        if( !didScroll ) {
            didScroll = true;
            setTimeout( scrollPage, 250 );
        }
    }, false );
}

function scrollPage() {
        var sy = scrollY();
        if ( sy >= changeHeaderOn ) {
            var windowtab = $(window).width();
            if (windowtab >= 1021)
            {
            classie.add( header, 'cbp-af-header-shrink' );
            }
        }
        else {
            classie.remove( header, 'cbp-af-header-shrink' );
        }
        didScroll = false;
}

function scrollY() {
    return window.pageYOffset || docElem.scrollTop;
}

init();
})();

and

var classie = {
// full names
 hasClass: hasClass,
addClass: addClass,
removeClass: removeClass,
toggleClass: toggleClass,
 // short names
has: hasClass,
 add: addClass,
remove: removeClass,
toggle: toggleClass
};

I had it working in DNN when I add a module for the jQuery however when I had it to the skin, I end up with the above console error

Hi Im trying to make a shrinking header, I almost have it working however i keep getting the above error for this section of the js files

var cbpAnimatedHeader = (function() {

var docElem = document.documentElement,
    header = document.querySelector( '.cbp-af-header' ),
    didScroll = false,
    changeHeaderOn = 300;

function init() {
    window.addEventListener( 'scroll', function( event ) {
        if( !didScroll ) {
            didScroll = true;
            setTimeout( scrollPage, 250 );
        }
    }, false );
}

function scrollPage() {
        var sy = scrollY();
        if ( sy >= changeHeaderOn ) {
            var windowtab = $(window).width();
            if (windowtab >= 1021)
            {
            classie.add( header, 'cbp-af-header-shrink' );
            }
        }
        else {
            classie.remove( header, 'cbp-af-header-shrink' );
        }
        didScroll = false;
}

function scrollY() {
    return window.pageYOffset || docElem.scrollTop;
}

init();
})();

and

var classie = {
// full names
 hasClass: hasClass,
addClass: addClass,
removeClass: removeClass,
toggleClass: toggleClass,
 // short names
has: hasClass,
 add: addClass,
remove: removeClass,
toggle: toggleClass
};

I had it working in DNN when I add a module for the jQuery however when I had it to the skin, I end up with the above console error

Share Improve this question asked Nov 17, 2014 at 10:28 user3182518user3182518 2274 gold badges6 silver badges14 bronze badges 5
  • If you're including jQuery, why not use jQuery everywhere else? Where does this error e from? (it's not directly from any of the code you posted). Is it from jQuery? – h2ooooooo Commented Nov 17, 2014 at 10:29
  • 1 There's no 'classList' anywhere in the above code... where is it throwing? – Will Jenkins Commented Nov 17, 2014 at 10:31
  • Can you make a fiddle ? – Der Vampyr Commented Nov 17, 2014 at 10:33
  • 1 We can't help if you don't show the code where the error occurs, but at a guess, looking at what you did provide, header is null because as of when you do the header = document.querySelector( '.cbp-af-header' ) line, there is no matching element in the document. (Perhaps you need to move the script to the end of the page.) – T.J. Crowder Commented Nov 17, 2014 at 10:33
  • @T.J.Crowder Thanks for your ment. Moving all JS script to the end of the page; is the solution. – egyamado Commented Feb 2, 2015 at 7:12
Add a ment  | 

2 Answers 2

Reset to default 3

This line in the script:

header = document.querySelector('.cbp-af-header')

@ MDN for document.querySelector()

it says that, the first element in the document with the class is returned.


So may be you are looking for .querySelectorAll("selector/s"):

document.querySelectorAll(".cbp-af-header");

@ MDN for document.querySelectorAll()

returns a list of all elements (div in case) supplied within the document.

I encountered the same problem. I realized that IIFE was executed before the DOM was pletely loaded. If you are use jQuery, try wrapping it in $(document).ready()

发布评论

评论列表(0)

  1. 暂无评论