2016-04-18 23 views
0

私はダイスローラーをコードすることになっている大学の割り当てを持っています。JavaScript:複数のダイスローラーでそれぞれサイコロのサイコロを振った

ローラーにダイスを追加したり引いたりすることができます。ボタンを押してサイコロを追加すると、ランダムなドット数(1〜6)でd6が作成されます。ローラーには最大40個のサイコロを加えることができます。

ダイスローラーは、ダイスの圧延の合計を示します。私の問題は、カウンターの代わりに複数のローラーを開いたときに、最初のローラーのサイコロの合計がコピーされることです。新しいローラーにさらにサイコロを加えると、新しいローラーの代わりに最初のローラーの合計に加算されます。言い換えれば:

ダイスローラ1ダイスローラ1,2,3,4の和を示し...

ダイスローラ2は、ダイスローラ1の最初の和を示し、その後更新しません。

どうしたらいいですか?私は各ローラーが自分のサイコロの合計だけを表示するようにしたい。言い換えれば:

サイコロローラー1では、私は、私だけが唯一のローラ2にサイコロの合計を表示したい、サイコロローラー2ではローラ1

にサイコロの合計を示したいと思います。

ここに1ドットのダイのコードを示します。

// dice-side-one li 
var diceSideOne = document.createElement("li"); 
diceSideOne.className = "dice dice-side-one"; 
diceSideOne.setAttribute('data-diceValue', '1'); 

ここに、ダイスの合計を計算するコードがあります。

function getSumDiceValue(){ 
    var dice = document.getElementsByClassName("dice");     
    var diceTotal = 0;             
    for(var i = 0; i < dice.length; i++){        
     diceTotal += Number(dice[i].getAttribute("data-diceValue"));  
    };        
    return diceTotal; 
}; 

ここに、ダイスの合計を示すコードがあります。

// Dice summ li 
var totalDiceSumm = document.createElement("p"); 
totalDiceSumm.className = "dice-summ"; 
totalDiceSumm.innerHTML = getSumDiceValue(); 

diceToolbarCounterWrapper.appendChild(totalDiceSumm); 

(私はちょうど合計が唯一の「M」で綴られる気付きました)

+0

私はあなたの質問を読んでいる、と私はそれに答えるのに十分な情報がないと思います。あなたはhtmlを提供していない、私はあなたが完全なjavascriptを提供したとは思わない。 IMOは、答えを得るための最善の策は、作業中のjsfiddleを作成することです – TKoL

+0

ここに問題のあるフィドルです。https://jsfiddle.net/txdq7upw/1/ –

+0

その行 'document.getElementsByClassName( 'dice-summ')[ 0] .innerHTML = getSumDiceValue() 'が問題です。 'dice-summ'クラス名ですべての要素を取得していますが、具体的に最初の要素を選択して更新するだけです。 – Craicerjack

答えて

1

あなたのフィドルを見た後。どのAdd Diceボタンがクリックされているかを調べる必要があります。次に、次の要素として更新する集計を見つけることができます。あなたはこのラインでこれを行うことができます。

this.nextSibling.innerHTML = getSumDiceValue(); 

thisのでthis.nextsiblingを更新するために、正しい項目を参照し、クリックされた要素を参照します。

function insertDice() { 
    var diceSideTwo = document.createElement("div"); 
    diceSideTwo.className = "dice dice-side-two"; 
    diceSideTwo.innerHTML = "2"; 
    diceSideTwo.setAttribute('data-diceValue', '2'); 
    diceWindowWrapper.appendChild(diceSideTwo); 
    this.nextSibling.innerHTML = getSumDiceValue(); //use this instead of line below 
    //document.getElementsByClassName('dice-summ')[1].innerHTML = getSumDiceValue() 
}; 

合計合計を更新するときにも、すべてのダイスをループするという問題があります。

updated fiddle

+0

申し訳ありませんが、返事にはとても時間がかかりました。私は問題を示すフィドルを作った。 https://jsfiddle.net/txdq7upw/1/ –

+0

これは正しいローラーで更新されていますが、残念ながらあなたが言ったようにすべてのサイコロの合計がまだカウントされています。解決策は、すべてのローラーに何らかの形で固有のIDを付けることだと思いますか?もしそうなら、どうやってそれをやりますか? –

+0

ええ、ダイスを区別するためには、IDやトラッキングをクリックしているかどうかを判断する必要があります。 – Craicerjack

関連する問題