2013-07-18 48 views
0

我正在設計一種圍繞六邊形棋盤的團隊基地。這個想法是,當一個團隊基地被點擊時,輪到該團隊。我有:使用對象的javascript函數

$('.team').click(function(){ 
     var teamID=$(this).attr('id'); 
     explore(teamID); 
    }); 

我然後使用teamID找到被點擊的團隊,這被存儲爲從屬性,如teamname,得分JSON文件中的對象的索引等

function explore(index){   // the game portion 
     var turn=file[index];  // finds the team's info from json file 
     $('.hex').click(function(){ // when a hex is clicked.... play the game 
      alert(turn.teamname);  
      // game elements 
    } 

這總是第一次使用,但是如果我點擊不同的團隊框然後點擊一個十六進制,通常它會認爲它是我之前點擊的框的轉彎。我添加了警報(turn.teamname)以嘗試調試。如果我點擊了不同的方框,它會始終提醒第一個方框,然後發送第二個方框提示。我無法弄清楚爲什麼會有兩個警報?所以它會一直提醒'team1',然後'team1','team2'。當我點擊更多的盒子時,它會一直提醒,直到它提醒所有人。另外,如果我之前點擊了兩個以上的框,即使我繼續點擊相同的十六進制,它似乎在交替提醒我它是'team1'和'team2'。

這是我的第一個stackoverflow帖子,所以我希望它是有道理的!謝謝!

回答

1

你得到這種行爲的原因是你將事件處理程序添加到DOM元素,但從不刪除它們。你需要改變處理單擊格式的方式。您可以使用http://api.jquery.com/one/將事件處理程序添加到包含所有格的父元素,並檢查事件處理程序中單擊了哪個十六進制。 或者你可以嘗試,你一旦添加事件偵聽器的不吉利的東西更平凡的解決方案,並檢查是否有一個選擇的團隊:

var turn; 
var teamSelected = false; 
function explore(index){   // the game portion 
    teamSelected = true; 
    turn=file[index];  // finds the team's info from json file 
} 
$('.hex').click(function(){ // when a hex is clicked.... play the game 
    if (teamSelected) { 
     alert(turn.teamname);  
     // game elements 
     teamSelected = false; 
    } 
} 
0

這樣的事情,我會建議進入流星。反應式編程模型比命令式模型要乾淨得多(特別是在可以快速變得複雜的遊戲中)。

我覺得this example說明了使用這個框架可以很快完成什麼(最接近你的問題的例子)。

爲了潛入,我建議您看看the intro video,然後進入the docsrecent book