Javascript &引用;无法读取属性';类列表';“无效”的定义;使用classList.add时
我有这个错误,但因为我不熟悉代码。它来自startbootstrap(创意)中的一个主题。文件是 classie.js 代码: 错误在于: 元素类列表添加(c) 我不熟悉编写的代码。我将此文件与其他js文件一起包括在内。另一个js文件似乎需要变量classie 编辑: 以下是CONSOLE中的错误: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
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");
}
}
}
});