<!DOCTYPE html>
<html>
<head>
	<title>Face Matching Game</title>
	<h2>Matching Game</h2>
	<p>Click on the EXTRA face on the left side</p>
	<style type="text/css">
		div { position: absolute; width: 640px; height: 550px; background-color: maroon }
		img { position: absolute; width: 100px; height: 100px}
		#rightSide { left: 650px; border-left: 2px solid black; }
	</style>
	<script type="text/javascript">
		var NUM_OF_FACES = 0;
		var THE_LEFT_SIDE, THE_RIGHT_SIDE;
		//Function to generate faces
		function generateFaces() {
			THE_LEFT_SIDE = document.getElementById("leftSide");
			THE_RIGHT_SIDE = document.getElementById("rightSide");
			NUM_OF_FACES += 5;
			var image;
			while(NUM_OF_FACES>0){
				image = document.createElement("img");
				image.src = "smile.png";
				image.style.top = Math.floor(Math.random()* (THE_LEFT_SIDE.offsetHeight - 100)) + "px";
				image.style.left = Math.floor(Math.random()* (THE_LEFT_SIDE.offsetWidth - 100)) + "px";
				THE_LEFT_SIDE.appendChild(image);
				NUM_OF_FACES -= 1;
				//console.log(image.style.top, image.style.left )
			}
			var leftSideImages = THE_LEFT_SIDE.cloneNode(true);
			leftSideImages.removeChild(leftSideImages.lastChild);
			THE_RIGHT_SIDE.appendChild(leftSideImages);
		}//end generatefaces()

		function deleteFaces(argument) {
			while(THE_LEFT_SIDE.firstChild){
				THE_LEFT_SIDE.removeChild(THE_LEFT_SIDE.firstChild);
			}
			while(THE_RIGHT_SIDE.firstChild){
				THE_RIGHT_SIDE.removeChild(THE_RIGHT_SIDE.firstChild);
			}
		}//end deleteFaces()

		var theBody = document.getElementsByTagName("body")[0];
		THE_LEFT_SIDE = document.getElementById("leftSide");
		THE_RIGHT_SIDE = document.getElementById("rightSide");
		//Event handling
		THE_LEFT_SIDE.lastChild.onclick = function goToNextLevel() {
			alert("You clicked on correct face.");
			deleteFaces();
			generatefaces();
		};
		theBody.onclick = function gameOver() {
			alert("Game Over!!");
			theBody.onclick = null;
			THE_LEFT_SIDE.lastChild.onclick = null;
		};
	</script>
</head>
<body onload="generateFaces()">
	<div id="leftSide"></div>
	<div id="rightSide"></div>
</body>
</html>





我是Java语言的初学者,在做作业时遇到问题。
这是事实匹配游戏,您必须单击左侧的多余面孔,然后游戏会继续进行,直到您单击左侧多余的面孔为止。
上面是HTML文件,其中嵌入了JS代码。

我收到错误消息:行48的Uncaught TypeError: Cannot read property 'lastChild' of nullonclick div lastChild上的THE_LEFT_SIDE事件处理函数。我不知道它是怎么来的,我的代码有什么问题?
任何线索将不胜感激。

最佳答案

您正在尝试访问ID为leftSide的元素,然后再将其添加到DOM中。

如果将脚本移动到页面正文的末尾,您将不再看到此错误,而是看到另一种不相关的错误:



<!DOCTYPE html>
<html>
<head>
	<title>Face Matching Game</title>
	<h2>Matching Game</h2>
	<p>Click on the EXTRA face on the left side</p>
	<style type="text/css">
		div { position: absolute; width: 640px; height: 550px; background-color: maroon }
		img { position: absolute; width: 100px; height: 100px}
		#rightSide { left: 650px; border-left: 2px solid black; }
	</style>

</head>
<body onload="generateFaces()">
	<div id="leftSide"></div>
	<div id="rightSide"></div>

   	    <script type="text/javascript">
		var NUM_OF_FACES = 0;
		var THE_LEFT_SIDE, THE_RIGHT_SIDE;
		//Function to generate faces
		function generateFaces() {
			THE_LEFT_SIDE = document.getElementById("leftSide");
			THE_RIGHT_SIDE = document.getElementById("rightSide");
			NUM_OF_FACES += 5;
			var image;
			while(NUM_OF_FACES>0){
				image = document.createElement("img");
				image.src = "smile.png";
				image.style.top = Math.floor(Math.random()* (THE_LEFT_SIDE.offsetHeight - 100)) + "px";
				image.style.left = Math.floor(Math.random()* (THE_LEFT_SIDE.offsetWidth - 100)) + "px";
				THE_LEFT_SIDE.appendChild(image);
				NUM_OF_FACES -= 1;
				//console.log(image.style.top, image.style.left )
			}
			var leftSideImages = THE_LEFT_SIDE.cloneNode(true);
			leftSideImages.removeChild(leftSideImages.lastChild);
			THE_RIGHT_SIDE.appendChild(leftSideImages);
		}//end generatefaces()

		function deleteFaces(argument) {
			while(THE_LEFT_SIDE.firstChild){
				THE_LEFT_SIDE.removeChild(THE_LEFT_SIDE.firstChild);
			}
			while(THE_RIGHT_SIDE.firstChild){
				THE_RIGHT_SIDE.removeChild(THE_RIGHT_SIDE.firstChild);
			}
		}//end deleteFaces()

		var theBody = document.getElementsByTagName("body")[0];
		THE_LEFT_SIDE = document.getElementById("leftSide");
		THE_RIGHT_SIDE = document.getElementById("rightSide");
		//Event handling
		THE_LEFT_SIDE.lastChild.onclick = function goToNextLevel() {
			alert("You clicked on correct face.");
			deleteFaces();
			generatefaces();
		};
		theBody.onclick = function gameOver() {
			alert("Game Over!!");
			theBody.onclick = null;
			THE_LEFT_SIDE.lastChild.onclick = null;
		};
	</script>
</body>
</html>

09-25 21:32