0

2つの関数を持つ外部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();
4

2 に答える 2

2

ID「ゲーム」の要素が存在しますか?[編集:コードをよく見てください。スクリプトはHEADにあります。つまり、gameロードされる前に実行されているため、間違いなく存在しません。]存在しない場合は、でinfoありnull、にアクセスするinnerHtmlnull破損します。コード。JavaScriptコンソールをチェックして、エラーを確認してください。

コードを要素の下に移動するか(従来は終了タグgameの直前で、要素と本文の終わりの間のどこでも可能です)、本文のイベントハンドラーからコードを実行するか、イベントを提供するjQueryなどのライブラリを使用する必要があります。。bodyloadready

最初の行(使用していないinfo行)がコードを壊さない理由は、スクリプトタグが実行されたときではなく、実行された時点で要素を見つけているという事実です(ドキュメントが完全に読み込まれるよりもはるかに遅くなります)。が見つかりました(お気づきのとおり、これは機能しません)。gametester

于 2013-03-27T04:44:07.407 に答える
0

常に行うべき良いこと:javascriptコンソールをチェックしてください。

ロードする前にDOMを変更することはできません。<script...>タグをの直前に移動します</body>

于 2013-03-27T04:44:20.300 に答える