2013-03-27 64 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

相關問題