0

我有一个外部 javascript 文件,它有两个函数,每次页面加载时都应该调用它们。但是,两者都没有。如果我注释掉js文件中调用tester()函数的那一行,那么runGame()就会被调用,但是如果tester()没有被注释,那么都不运行。但是,如果我将 tester() 函数调用放在 runGame() 调用之后,那么 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();
4

2 回答 2

2

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

您必须将代码移动到game元素下方(它和正文末尾之间的任何位置都可以,通常在body结束标记之前),或者从正文的事件处理程序运行您的代码,或者使用提供事件load的库(如 jQuery)ready.

第一行(不使用的那一行info不会破坏您的代码的原因是您game在运行时正在查找元素tester(这将比文档完全加载要晚得多),而不是在脚本标记时找到(如您所见,这不起作用)。

于 2013-03-27T04:44:07.407 回答
0

一件好事总是要做:检查 javascript 控制台。

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

于 2013-03-27T04:44:20.300 回答