Javascript &引用;无法读取属性';类列表';“无效”的定义;使用classList.add时

Javascript &引用;无法读取属性';类列表';“无效”的定义;使用classList.add时,javascript,twitter-bootstrap,classiejs,Javascript,Twitter Bootstrap,Classiejs,我有这个错误,但因为我不熟悉代码。它来自startbootstrap(创意)中的一个主题。文件是 classie.js 代码: 错误在于: 元素类列表添加(c) 我不熟悉编写的代码。我将此文件与其他js文件一起包括在内。另一个js文件似乎需要变量classie 编辑: 以下是CONSOLE中的错误: Uncaught TypeError: Cannot read property 'classList' of null addClass @ classie.js?nngrmm:33 sc

我有这个错误,但因为我不熟悉代码。它来自startbootstrap(创意)中的一个主题。文件是

classie.js

代码:

错误在于:

元素类列表添加(c)

我不熟悉编写的代码。我将此文件与其他js文件一起包括在内。另一个js文件似乎需要变量classie

编辑:

以下是CONSOLE中的错误:

Uncaught TypeError: Cannot read property 'classList' of null
  addClass @ classie.js?nngrmm:33
  scrollPage @ cbpAnimatedHeader.js?nngrmm:30
另外,bootstrap.js中有一个错误

Uncaught TypeError: $(...).find(...).once is not a function
  Drupal.behaviors.bootstrap.attach @ bootstrap.js?nngrmm:16
  (anonymous function) @ drupal.js?nngrmm:76
  x.extend.each @ jquery.min.js?v=1.10.2:4
  Drupal.attachBehaviors @ drupal.js?nngrmm:74
  (anonymous function) @ drupal.js?nngrmm:412
  x.Callbacks.c @ jquery.min.js?v=1.10.2:4
  x.Callbacks.p.fireWith @ jquery.min.js?v=1.10.2:4
  x.extend.ready @ jquery.min.js?v=1.10.2:4
  q @ jquery.min.js?v=1.10.2:4
在这里的某个地方:

/**
 * @file
 * bootstrap.js
 *
 * Provides general enhancements and fixes to Bootstrap's JS files.
 */

var Drupal = Drupal || {};

(function($, Drupal){
  "use strict";

  Drupal.behaviors.bootstrap = {
    attach: function(context) {
      // Provide some Bootstrap tab/Drupal integration.
      $(context).find('.tabbable').once('bootstrap-tabs', function () {
        var $wrapper = $(this);
        var $tabs = $wrapper.find('.nav-tabs');
        var $content = $wrapper.find('.tab-content');
        var borderRadius = parseInt($content.css('borderBottomRightRadius'), 10);
        var bootstrapTabResize = function() {
          if ($wrapper.hasClass('tabs-left') || $wrapper.hasClass('tabs-right')) {
            $content.css('min-height', $tabs.outerHeight());
          }
        };
        // Add min-height on content for left and right tabs.
        bootstrapTabResize();
        // Detect tab switch.
        if ($wrapper.hasClass('tabs-left') || $wrapper.hasClass('tabs-right')) {
          $tabs.on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
            bootstrapTabResize();
            if ($wrapper.hasClass('tabs-left')) {
              if ($(e.target).parent().is(':first-child')) {
                $content.css('borderTopLeftRadius', '0');
              }
              else {
                $content.css('borderTopLeftRadius', borderRadius + 'px');
              }
            }
            else {
              if ($(e.target).parent().is(':first-child')) {
                $content.css('borderTopRightRadius', '0');
              }
              else {
                $content.css('borderTopRightRadius', borderRadius + 'px');
              }
            }
          });
        }
      });
    }
  };
错误:

$(上下文).find('.tabbable').once('bootstrap-tabs',函数(){


需要帮助。谢谢。

我今天遇到了同一个问题,但主题不同,我想发布我的决议,以便将来帮助他人

问题在于cbpAnimatedHeader.js文件。该文件定义了“scrollPage”函数,该函数调用“classie”函数。这就是为什么您最初看到classie.js文件出错的原因。在scrollPage函数中,使用了变量“header”:

但是,未以scrollPage函数可以读取的方式定义标头。要修复此错误,您可以全局或在scrollPage函数中定义标头。我选择只将变量定义复制到函数中。以下是cbpAnimatedHeader.js中的最终结果:

function scrollPage() {
    var sy = scrollY(),
    header = document.querySelector( '.navbar-fixed-top' );
    if ( sy >= changeHeaderOn ) {
        classie.add(header, 'navbar-shrink' );
    }
    else {
        classie.remove(header, 'navbar-shrink' );
    }
    didScroll = false;
}

我意识到我的问题是我将cbpAnimatedHeader.js文件从正文的底部移到了头部。因此,头部为空,因为html尚未呈现

我没有将标题查找添加到scrollPage函数中,而是将整个内容包装在jQuery文档中

$(function(){
  var cbpAnimatedHeader = (function() {

      var docElem = document.documentElement,
          header = document.querySelector( '.navbar-fixed-top' ),
          didScroll = false,
          changeHeaderOn = 300;

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

      function scrollPage() {
          var sy = scrollY();
          header = document.querySelector( '.navbar-fixed-top' );
          if ( sy >= changeHeaderOn ) {
              classie.add( header, 'navbar-shrink' );
          }
          else {
              classie.remove( header, 'navbar-shrink' );
          }
          didScroll = false;
      }

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

      init();

  })();
});

在这里添加我的解决方案,因为我得到了完全相同的错误,但它与实际的Classie插件无关

我正在使用此处的脚本在scroll:上缩小我的站点上的上部菜单

我向页面中添加了需要添加
.small
类的其他元素,因为当滚动到较小的菜单时,这些元素也会上移和收缩。我还添加了响应元素,这些元素并不总是在给定页面中定义。这就是问题所在,我曾尝试在类中使用addClass函数ie在一些滚动时实际上不存在的响应元素上,因此每次滚动页面时都会抛出一些错误

因此,在尝试向响应元素添加
.small
类之前,我执行了一项检查,以确保响应元素存在

发件人:

致:


某个地方有东西试图访问
null
对象的属性
classList
,例如
document.geyElementById('nonexisting').classList.add('foo'))如果没有ID为的元素,则
将抛出此错误。元素,即我正在查找的元素。我不知道它来自何处。document.documentElement返回我的全部html标记。@Aracthor这是错误消息在彻底搜索答案后,我遇到了与我相同的问题。当时我正在t他的,很好的一个!!谢谢!这正是我解决这个错误的原因。
function scrollPage() {
    var sy = scrollY(),
    header = document.querySelector( '.navbar-fixed-top' );
    if ( sy >= changeHeaderOn ) {
        classie.add(header, 'navbar-shrink' );
    }
    else {
        classie.remove(header, 'navbar-shrink' );
    }
    didScroll = false;
}
$(function(){
  var cbpAnimatedHeader = (function() {

      var docElem = document.documentElement,
          header = document.querySelector( '.navbar-fixed-top' ),
          didScroll = false,
          changeHeaderOn = 300;

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

      function scrollPage() {
          var sy = scrollY();
          header = document.querySelector( '.navbar-fixed-top' );
          if ( sy >= changeHeaderOn ) {
              classie.add( header, 'navbar-shrink' );
          }
          else {
              classie.remove( header, 'navbar-shrink' );
          }
          didScroll = false;
      }

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

      init();

  })();
});
window.addEventListener('scroll', function(e){  
    var header = document.querySelector("header");
    var responsive_element = document.querySelector(".responsive_element"); // responsive, not always on the page

    var distanceY = window.pageYOffset || document.documentElement.scrollTop,
        shrinkOn = 160;

    if (distanceY > shrinkOn) {

        classie.addClass(header,"smaller");
        classie.addClass(responsive_element,"smaller");

    } else {

        if (classie.has(header,"smaller")) {

            classie.removeClass(header,"smaller");
            classie.removeClass(responsive_element,"smaller");

        }

    }

});
window.addEventListener('scroll', function(e){

    var responsive = false; // to find out if we have those missing elements on the page
    var header = document.querySelector("header"); // always exists

    var distanceY = window.pageYOffset || document.documentElement.scrollTop,
        shrinkOn = 160;

    if (document.querySelector(".responsive_element") != null) {    
    responsive = true; // if we are in mobile mode
    }

    // only deal with the mobile element if it exists
    if (responsive) {
    var responsive_element = document.querySelector(".responsive_element");
    } 


    if (distanceY > shrinkOn) {

        classie.addClass(header,"smaller");

        // only add the smaller class if the element exists
        if (responsive) {
        classie.addClass(responsive_element,"smaller");
        }


    } else {

        if (classie.has(header,"smaller")) {

            classie.removeClass(header,"smaller");

            // only remove the smaller class if the element exists
            if (responsive) {
            classie.removeClass(responsive_element,"smaller");
            }

        }

    }

});