-5

私はJavaScriptを学んでいて、短いダイスロールアプリを作成しましたが、ボタンがクリックされても実行されません。問題がどこにあるのかわかりません。誰かがこれを手伝ってくれませんか。

    <!DOCTYPE HTML>
<html>
    <head>
        <script type=text/javascript>

        var face0= new Image() face0.src="d1.gif"
        var face1= new Image() face1.src="d2.gif"
        var face2= new Image() face2.src="d3.gif"
        var face3= new Image() face3.src="d4.gif"
        var face4= new Image() face4.src="d5.gif"
        var face5= new Image() face5.src="d6.gif"

        function rollDice(){
        var randomdice= Math.round(Math.random() *5)document.images["mydice"].src=eval("face" * randomdice+".src")
        }
        </script>
    </head>
    <body>
    <img src="d1.gif" name="mydice">
    <form>
    <input type="button" value="Roll" onclick="rollDice()">
    </form>

    </body>
</html>
4

4 に答える 4

2

セミコロンはオプションではありません。ブラウザは可能な限りそれらを挿入しようとしますが、多くの場合間違っている可能性があります。

さらに、@!#$配列を使用してください!それが彼らの目的です!

これを試して:

(function() {
    var i, faces = [];
    for( i=0; i<6; i++) {
        (faces[i] = new Image()).src = "d"+(i+1)+".gif";
    }
    window.rollDice = function() {
        var side = Math.floor(Math.random()*6);
        document.getElementById('mydice').src = faces[side].src;
    }
})();

...

<img src="d1.gif" id="mydice" />

そして、フォームを削除します。何も送信していないので、フォームは必要ありません。

于 2012-11-27T14:59:44.443 に答える
1

使用しないでくださいeval。代わりに、次のようなことを行います。

var faces=[]
var numFaces=6;
for(var i=1;i<=numFaces;i++){
    var img=new Image();
    img.src='d'+i+'.gif';
    faces.push(img);
}
window.rollDice=function(){
    var randomdice= Math.floor(Math.random()*numFaces);
    document.images["mydice"].src=faces[randomdice].src;
}

jsFiddle: http: //jsfiddle.net/jdwire/fZY3u/

于 2012-11-27T15:01:27.227 に答える
0

あなたはもうすぐそこにいます-semi colonsステートメントの間に必要なだけで、文字列を「*」ではなく「+」で連結する必要があります

編集

Kolinkが指摘しているように、eval 危険です。

を実際にインスタンス化する必要はまったくありませんImage()。ダイの側面に6つのgifがある場合、必要なのはsrc、次のように画像のファイル名を変更することだけです。

 function rollDice(){
     var randomdice= Math.round(Math.random() *5) + 1; // +1 since your gifs are 1-6
     document.images["mydice"].src = "d" + randomdice.toString() + ".gif";
 }

ここでフィドルを更新

編集この回答は画像をプリロードしないことに注意してください。これにより、各サイコロの顔のgifがキャッシュされる前に初めてトリガーされたときに、パフォーマンスが低下します。

于 2012-11-27T14:59:18.493 に答える
-1

セミコロンを逃しました;

    var face0= new Image(); face0.src="d1.gif";
    var face1= new Image(); face1.src="d2.gif";
    var face2= new Image(); face2.src="d3.gif";
    var face3= new Image(); face3.src="d4.gif";
    var face4= new Image(); face4.src="d5.gif";
    var face5= new Image(); face5.src="d6.gif";

    function rollDice(){
       var randomdice= Math.round(Math.random() *5); 
       document.images["mydice"].src=eval("face" + randomdice+".src");
    }

注:コードは常にきちんとフォーマットしてください。すべてのコードを1行に記述しないでください。混乱します。

于 2012-11-27T14:57:21.853 に答える