2017-08-29 45 views
0

我正在構建一個Match Game,而且我試圖將卡片值傳遞給一個空數組,它將檢查數組是否匹配,一旦數組的長度= 2。 $ flippedCards的,我看到該卡價值尚未推到它和它的長度仍爲0Jquery .push沒有增加數組的長度

$('.card').click(function() { 
MatchGame.flipCard($(this),$('#game')) 
}); 


MatchGame.flipCard = function($card, $game) { 

    var $flippedCards = $game.data('flippedCards', []); 

    console.log($card.data('flipped')); 
    console.log($card.data('value')); 
    console.log($card.data('color')); 

    if ($card.data('flipped')) { 

     console.log('card already flipped'); 
     console.log($flippedCards); 
     return; 

    } else { 

     $card.data('flipped', true); 
     $card.css('background-color', $card.data('color')); 
     $card.text($card.data('value')); 
     $card.css('background-image', null); 
     $flippedCards.push($card.data('value')); 

     console.log($flippedCards); 
    } 

}; 

該項目也可以在這裏https://github.com/liviarett/matchgame

+0

提問的時候請提供所有相關的代碼。我在 – TheRealMrCrowley

+0

以上的代碼中看不到'push'的調用。$ flippedCards.push($ card.data('value'));'有,但它正在運行嗎? – tadman

回答

0

因爲你實際設定的數據屬性在這裏:

var $flippedCards = $game.data('flippedCards', []); 

jQuery是所有有關鏈接,所以當你做$ game.data實際上將返回$遊戲( 'filppedCards',[]):

$game.data('flippedCards', []) === $game // true 

您可能有興趣在之前的某處設置數據屬性,可能在renderCards方法中。並設置$ flippedCards而不值參數:

var $flippedCards = $game.data('flippedCards'); 

UPD:你已經有它在renderCards方法實際上:

$game.empty(); 
$game.data('flippedCards', []); 
+0

謝謝,我保持了一切(初始化它在renderCards),但更新var $ flippedCards = $ game.data('flippedCards',[]); var $ flippedCards = $ game.data('flippedCards');它似乎工作!謝謝您的幫助 :) –

1

我克隆並通過您的代碼運行。好像你每次初始化一個新的var $flippedCards = $game.data('flippedCards', []);,你可能想要初始化它在其他地方,並把它作爲一個全局變量或作爲參數傳遞它,否則,它將重新初始化它作爲一個新變量,這就是爲什麼它沒有像你想要的那樣遞增。