2013-03-27 69 views
0

我有一个外部的JavaScript文件,有两个功能,并应在每次页面加载时调用。 但是,也没有。如果我在调用tester()函数的js文件中注释掉该行,则会调用runGame(),但如果tester()未被注释,则不会运行。但是,如果我在runGame()调用之后放置了tester()函数,那么runGame()将起作用,但tester()仍然不起作用。为什么这两个函数都没有被调用,如果其中一个没有注释?

tester()甚至不能自行运行,所以有可能是我在那个函数中做错了。谁能告诉我我做错了什么?

HTML

<html> 
<head> 
    <script type="text/javascript" src="rock_paper_scissors.js"> 

    </script> 

</head> 

<body> 
    <p id="game">Test</p> 
    <br /> 
    <input type="button" value="Play again" onClick="tester()"></input> 
</body> 

rock_paper_scissors.js

var info = document.getElementById("game"); 

var tester = function(){ 
    document.getElementById('game').innerHTML = 'hello'; 
    //info.innerHTML("HI"); 
}; 

var compare = function(choice1, choice2){ 
    if(choice1 == choice2) 
     document.write("The result is a tie!"); 
    else if(choice1 == "rock"){ 
     if(choice2 == "scissors") 
      document.write("You win! Rock wins"); 
     else 
      document.write("The computer wins! Paper wins"); 
    } 
    else if(choice1 == "paper"){ 
     if(choice2 == "rock") 
      document.write("You win! Paper wins"); 
     else 
      document.write("The computer wins! Scissors wins"); 
    } 
    else if(choice1 == "scissors"){ 
     if(choice2 == "rock") 
      document.write("The computer wins! Rock wins"); 
     else 
      document.write("You win! Scissors wins"); 
    } 
    else 
     document.write("You didn't pick a real choice"); 
}; 

var runGame = function(){ 

    var userChoice = prompt("Do you choose rock, paper or scissors?"); 
    var computerChoice = Math.random(); 
    if (computerChoice < 0.34) { 
     computerChoice = "rock"; 
    } else if(computerChoice <= 0.67) { 
     computerChoice = "paper"; 
    } else { 
     computerChoice = "scissors"; 
    } 


    document.write("<p>You picked " + userChoice + "</p>"); 
    document.write("<p>The Computer picked " + computerChoice + "</p>"); 
    compare(userChoice, computerChoice); 
}; 



runGame(); 
tester(); 
+1

将脚本标记放在主体结束标记后面,以便它仅在加载DOM时加载。 – zz3599 2013-03-27 04:42:59

+1

检查JavaScript控制台...您无法在加载之前修改DOM。将''标签移动到'' – jeremy 2013-03-27 04:43:01

+0

@ zz3599之前,你的意思是*之前*吗?我从来没有听说过这样做。 – jeremy 2013-03-27 04:43:30

回答

2

确定元素ID为 “游戏” 的存在? [编辑:只是更好地看看你的代码 - 你的脚本是在HEAD,这意味着它在game加载之前执行,所以它肯定不存在。]如果不是,infonull,并访问innerHtmlnull会破坏你的代码。检查JavaScript控制台以查看错误。

你必须要么将你的代码game元以下(任意位置和身体的末端之间会做,传统上只是body结束标记之前),或运行从身体的load事件处理代码,或使用图书馆比如提供了一个ready事件的jQuery。

究其原因,第一行破坏你的代码(不使用info的)是你的那一刻tester发现game元素的事实是运行(这将大大晚于该文件是全加载),而不是在找到脚本标记时(如您注意的那样,它不起作用)。

+0

谢谢。有效。我现在明白 – rasen58 2013-03-27 04:47:35

+0

也感谢你有关信息的信息。我也修正了这一点。 – rasen58 2013-03-27 04:53:56

0

总是这样做的好处:检查javascript控制台。

在加载之前,您无法修改DOM。将<script...>标签移动到</body>之前。

+0

谢谢,我现在看到 – rasen58 2013-03-27 04:53:26

+0

为什么dv?请解释。 – jeremy 2013-03-29 19:05:44

相关问题