2017-05-22 13 views
0

私はメモリゲームを作り、カードをそのイメージ値にフリップしようとしています。カードをクリックすると、イメージが配列の現在のイメージに変更されるはずですが、何らかの理由でそれが機能しません。メモリゲーム現在のカードをセットアトリビュートでフリップする方法

JS

var faces = []; //array to store card images 
faces[0] = 'images/king-of-diamonds.png'; 
faces[1] = 'images/king-of-hearts.png'; 
faces[2] = 'images/queen-of-diamonds.png'; 
faces[3] = 'images/queen-of-hearts.png'; 

var cardsInPlay = []; 

var checkForMatch = function (cardId) { 
    if (faces[cardId] === faces[cardId + 1]) { 
     console.log("You found a match!"); 
    } else { 
     console.log("Sorry, try again."); 
    } 
} 

var flipCard = function (cardId, name) { 

    document.getElementById('image1')[this].getAttribute("id").src = faces[cardId] 

    checkForMatch(); 
} 

HTML

<div> 
    <img onclick="flipCard(1,this)" id="image1" src="images/back.png" alt="Queen of Diamonds"> 
    <img onclick="flipCard(2,this)" id="image1" src="images/back.png" alt="Queen of Hearts"> 
    <img id="image3" src="images/back.png" alt="King of Diamonds"> 
    <img id="image4" src="images/back.png" alt="King of Hearts"> 
</div> 
+0

'id'属性は、文書単位で一意である必要があります。 2つの要素に 'image1'が使われています。 –

+0

Thnxしかし、私はdiffedent idsを持っている場合、私はそれらをクリックすると私は他のカードを反転させるのですか?私は4つの異なる機能を作りますか? –

+0

'this'はイベントを発生させた要素に設定されます。渡す必要はありません。単に 'getElementById'の代わりに' flipCard'関数で使うだけです。 –

答えて

0

あなたは異なる要素に同じIDを使用しないでください。 IDはユニークであると考えられているので、ページ全体で同じIDを持つ要素を増やすべきではありません。この時点で

あなたが直接行うことができます。

var flipCard = function (cardId, name) { 
    document.getElementById('image1').src = faces[cardId]; 
    checkForMatch(); 
} 
+0

助けてくれてありがとうが、私はそれらをclikするときに私は他のカードを反転するには?上記の解決策は、最初のカードを反転するだけですが、クリックしたカードを反転しようとしています –

+0

これを達成するためのアイデアはありますか? –

+0

関数の名前の代わりに要素のidを渡すことができ、すべての要素に対して異なるIDを持つようにすることができます。 var flipCard = function(cardId、id){ document.getElementById(id).src = faces [cardId]; checkForMatch(); }。これにより、渡されたcarIdで渡されたimg idのsrcが変更されます。 –

関連する問題