2013-06-02 52 views
1

我刚刚完成在JavaScript中codeacademy当然这样原谅我总知识的缺乏。使用appendChild()动态图像添加到特定的div

我试图创建一个使用JavaScript和HTML经典的酒吧游戏1-4-24(也叫过了午夜或午夜后)。 (这是一个video,它为那些不知道它是什么的人展示了游戏

到目前为止,我创建了一个函数,它将掷骰子并将其存储在一个数组中。代码我能够将这些结果以图像形式附加到页面主体,但我需要能够删除用户再次掷骰子时的结果

我决定使用div分离的滚动骰子,骰子用户保留和使用掷骰子菜单

我的问题是这样的:我需要在这个新的div显示模辊的成绩我已经非常,非常不成功 - 米因为我并不完全理解appendChild()在阅读W3school和其他网站上的多篇文章后是如何工作的。

因此,这里是我的代码 - 在addImageRolled功能具体看 - 我并不希望它“固定”,我想知道我怎么能解决这个问题。这对我来说是一个学习项目。

<!doctype html> 
    <html> 
    <head> 
<title>Put your title here</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<link href="style.css" type="text/css" rel="stylesheet" /> 
    </head> 
    <body> 

<script> 
    // variables 
    var diceLeft = 6; 

    // arrays 

    var rolls = []; 
    var kept = []; 

    // functions 

    // rolls dice 
    function rollDice() { 
     for (var i = 0; i < diceLeft; i++) { 
     rolls[i] = 1 + Math.floor(Math.random() * 6); 
     }; 
      displayRoll(); 
    }; 

    // creates images for displayRoll function 
    function addImageRolled(id, src, width, height, hspace) { 
    var img = document.createElement("img"); 
    img.id = id; 
    img.src = src; 
    img.width = width; 
    img.height = height; 
    img.hspace = hspace; 
    img.onmouseup= keepDie(); 
    document.getElementById("Rolled").appendChild(img); 

    }; 

    // displays images based on rolls 
    displayRoll() { 
     switch(roll[0]) { 
     case 1: addImageRolled(1, "dice-1.png", 100, 100, 5); 
     break; 
     case 2: addImageRolled(1, "dice-2.png", 100, 100, 5); 
     break; 
     case 3: addImageRolled(1, "dice-3.png", 100, 100, 5); 
     break; 
     case 4: addImageRolled(1, "dice-4.png", 100, 100, 5); 
     break; 
     case 5: addImageRolled(1, "dice-5.png", 100, 100, 5); 
     break; 
     case 6: addImageRolled(1, "dice-6.png", 100, 100, 5); 
     break; 
     }; 

     switch(roll[1]) { 
     case 1: addImageRolled(2, "dice-1.png", 100, 100, 5); 
     break; 
     case 2: addImageRolled(2, "dice-2.png", 100, 100, 5); 
     break; 
     case 3: addImageRolled(2, "dice-3.png", 100, 100, 5); 
     break; 
     case 4: addImageRolled(2, "dice-4.png", 100, 100, 5); 
     break; 
     case 5: addImageRolled(2, "dice-5.png", 100, 100, 5); 
     break; 
     case 6: addImageRolled(2, "dice-6.png", 100, 100, 5); 
     break; 
     }; 

     switch(roll[2]) { 
     case 1: addImageRolled(3, "dice-1.png", 100, 100, 5); 
     break; 
     case 2: addImageRolled(3, "dice-2.png", 100, 100, 5); 
     break; 
     case 3: addImageRolled(3, "dice-3.png", 100, 100, 5); 
     break; 
     case 4: addImageRolled(3, "dice-4.png", 100, 100, 5); 
     break; 
     case 5: addImageRolled(3, "dice-5.png", 100, 100, 5); 
     break; 
     case 6: addImageRolled(3, "dice-6.png", 100, 100, 5); 
     break; 
     }; 

     switch(roll[3]) { 
     case 1: addImageRolled(4, "dice-1.png", 100, 100, 5); 
     break; 
     case 2: addImageRolled(4, "dice-2.png", 100, 100, 5); 
     break; 
     case 3: addImageRolled(4, "dice-3.png", 100, 100, 5); 
     break; 
     case 4: addImageRolled(4, "dice-4.png", 100, 100, 5); 
     break; 
     case 5: addImageRolled(4, "dice-5.png", 100, 100, 5); 
     break; 
     case 6: addImageRolled(4, "dice-6.png", 100, 100, 5); 
     break; 
     }; 

     switch(roll[4]) { 
     case 1: addImageRolled(5, "dice-1.png", 100, 100, 5); 
     break; 
     case 2: addImageRolled(5, "dice-2.png", 100, 100, 5); 
     break; 
     case 3: addImageRolled(5, "dice-3.png", 100, 100, 5); 
     break; 
     case 4: addImageRolled(5, "dice-4.png", 100, 100, 5); 
     break; 
     case 5: addImageRolled(5, "dice-5.png", 100, 100, 5); 
     break; 
     case 6: addImageRolled(5, "dice-6.png", 100, 100, 5); 
     break; 
     }; 

     switch(roll[5]) { 
     case 1: addImageRolled(6, "dice-1.png", 100, 100, 5); 
     break; 
     case 2: addImageRolled(6, "dice-2.png", 100, 100, 5); 
     break; 
     case 3: addImageRolled(6, "dice-3.png", 100, 100, 5); 
     break; 
     case 4: addImageRolled(6, "dice-4.png", 100, 100, 5); 
     break; 
     case 5: addImageRolled(6, "dice-5.png", 100, 100, 5); 
     break; 
     case 6: addImageRolled(6, "dice-6.png", 100, 100, 5); 
     break; 
     }; 
    }; 

</script> 

<div class="content"> 
    <div class="Menu"> 
     <div class="content"> 
      <p>How to play: Click "Roll!" button to roll the dice. Click on any die to keep     it.</p> 
      <input type = "button" value = "Roll!" onClick = rollDice()> 
     </div> 
    </div> 
    <div id="Rolled" class="Rolled"> 
     <div class="content"> 
     </div> 
    </div> 
    <div class="Kept"> 
     <div class="content"> 
     </div> 
    </div> 
</div> 

+0

当我尝试创建一个小提琴时,它正在讨论一个语法错误。你有没有看到你的控制台? – karthikr

回答

2

有几个问题,你的代码所示,其中没有一个实际上都涉及到.appendChild()方法 - 你正在使用正确。

在您addImageRolled()功能,您也行:

img.onmouseup= keepDie(); 

...但没有定义keepDie()功能,并且还你不应该有括号或立即调用函数,并将结果作为分配onmouseup处理程序。实际上你需要声明函数,然后使用它是这样的:

img.onmouseup = keepDie; 

displayRoll()函数的声明缺少字function,它给你一个语法错误。并在displayRoll()内引用一个名为roll的数组,该数组应该是rolls。另外这个功能可以做多,短:

// displays images based on rolls 
function displayRoll() { 
    for (var i = 0; i < diceLeft; i++) { 
     addImageRolled(i + 1, "dice-" + rolls[i] + ".png", 100, 100, 5); 
    } 
} 

你并不需要六个独立的开关语句看起来都一样,你可以只使用一个for循环来处理您的rolls阵列中的每个元素。然后对于任何给定的元素rolls[i],不需要使用switch语句来决定添加哪个图像,因为您可以直接将rolls[i]元素的值连接到提供图像名称的字符串中。

这里有一个演示具有结合这些变化:http://jsfiddle.net/YcwDb/3/(实际上并没有图像,但你可以看到他们将成为。)

"I don't necessarily want it "fixed", I want to know how I can fix it. This is a learning project for me."

那么上面应该让你去。一般来说,如果您使用浏览器的开发工具(通过在Chrome或IE中按F12或在FF中按Ctrl-Shift-K显示),这些错误将显示在控制台中。有时候错误信息有点神秘(特别是对于初学者),但仍然比想知道可能会出错的问题要好。

+0

谢谢你的回答! – Kwestion

0
1. onclick method 

    <input type = "button" value = "Roll!" onClick = rollDice()> 

should be with wrapepd in quotes 

    <input type = "button" value = "Roll!" onClick = "rollDice()"> 

2. Your array is named rolls`var rolls = [];` 

    but in switch you got roll `switch(roll[0])` 
+0

感谢您的帮助! – Kwestion

1

我reccomend使用Chrome开发者工具(F12铬)调试的JavaScript。进入“Sources”,按左上角的箭头,找到文件,然后按Roll按钮。

我做的第一件事是“displayRoll()”前添加“功能”关键字,因为这将抛出一个SyntaxError。

几件事情,它表明:

“未捕获的ReferenceError:卷没有定义。”

后改变“滚动”的所有实例为“辊”,因为你定义的阵列是“辊”:

“未捕获的ReferenceError keepDie()没有被定义。”

删除引用“keepDie()”,因为我看不到它在做什么线,轧后之后,我得到的六幅图像显示在屏幕上了。

我也建议你使用某种循环,为您的“displayRoll()”功能,使代码更清洁,使其更容易改变你要显示的骰子的数量:

function displayRoll() { 
    for (var i = 0; i < 6; i++) 
    { 
     switch(rolls[i]) { 
      case 1: addImageRolled(i+1, "dice-1.png", 100, 100, 5); 
      break; 
      case 2: addImageRolled(i+1, "dice-2.png", 100, 100, 5); 
      break; 
      case 3: addImageRolled(i+1, "dice-3.png", 100, 100, 5); 
      break; 
      case 4: addImageRolled(i+1, "dice-4.png", 100, 100, 5); 
      break; 
      case 5: addImageRolled(i+1, "dice-5.png", 100, 100, 5); 
      break; 
      case 6: addImageRolled(i+1, "dice-6.png", 100, 100, 5); 
      break; 
      }; 
    } 
}; 

我不相信你有任何问题与“appendChild”,但我是一个C#开发人员,我的JavaScript知识是非常小的。

+0

谢谢你的回答,非常有帮助! – Kwestion