这是我一直看到的Firebug中的一个错误。
TypeError: $("#gallery-nav-button") is null
[Break On This Error]
$('#gallery-nav-button').addClass('animated fadeOutRightBig');
这是我的代码:
的 JS 的
$(function() {
$("#close-gallery-nav-button").click(function() {
$('#gallery-nav-button').addClass('animated fadeOutRightBig');
});
});
的 HTML 的
<div id="gallery-nav-button">
<h4 id="close-gallery-nav-button">X</h4>
<h3 class="text-center small-text"><a class="inline text-center small-text" href="#gallery-nav-instruct">Click Here for Gallery <br /> Navigation Instructions.</a></h3>
</div>
的 CSS 的
#close-gallery-nav-button{
text-indent:-9999px;
width:20px;
height:20px;
position:absolute;
top:-20px;
background:url(/images/controls.png) no-repeat 0 0;
}
#close-gallery-nav-button{background-position:-50px 0px; right:0;}
#close-gallery-nav-button:hover{background-position:-50px -25px;}
答案 0 :(得分:31)
我还想添加 - 因为这是重要错误消息“TypeError:[x]为null”的#1 Google搜索结果 - JavaScript开发人员获得此问题的最常见原因是他们正在尝试为DOM元素分配一个事件处理程序,但尚未创建DOM元素。
代码基本上是从上到下运行的。大多数开发人员将他们的JavaScript放在HTML文件的头部。浏览器已从服务器接收到HTML,CSS和JavaScript;正在“执行”/渲染网页;并且正在执行JavaScript,但它还没有进一步下载HTML文件以“执行”/呈现HTML。
要处理此问题,您需要在执行JavaScript之前引入延迟,例如将其放入未调用的函数中,直到浏览器“执行”所有HTML并触发事件“DOM ready”。
使用原始JavaScript,使用window.onload:
window.onload=function() {
/*your code here*
/*var date = document.getElementById("date");
/*alert(date);
}
使用jQuery,使用document ready:
$(document).ready(function() {
/*your code here*
/*var date = document.getElementById("date");
/*alert(date);
});
这样,在浏览器构建DOM之前,你的JavaScript才会运行,HTML元素存在(不是null :-)),你的JavaScript可以找到它并附加一个事件处理程序。
答案 1 :(得分:13)
我在这个页面上运行了几个脚本,显然一个脚本与另一个脚本冲突。为了解决我的问题,我添加了jQuery.noConflict();
var $j = jQuery.noConflict();
$j(function() {
$j("#close-gallery-nav-button").click(function() {
$j('#gallery-nav-button').addClass('animated fadeOutRightBig');
});
});
答案 2 :(得分:0)
我同意上面给出的有关onload事件的建议。 https://stackoverflow.com/a/18470043/2115934
更简单的解决方案(虽然不一定是更好的解决方案)是将脚本标记放在文档的结束正文标记之前。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1></h1>
<p></p>
<script src="script.js" type="text/javascript"></script> <!-- PUT IT HERE -->
</body>
</html>
答案 3 :(得分:-1)
我知道此问题已得到答复,这是一篇旧文章,但想分享我的经验。我最难以加载代码,并且不断遇到此错误。我在头部加载了javascript外部页面。一旦将其移动到身体刚要结束时,功能就会立即启动。