2014-09-26 66 views
0

因此,我正在製作戰艦遊戲,除了這一件事之外,所有東西都可以使用。我似乎無法弄清楚你會這樣做的正確方法。我想檢查點擊的TD值是否與數組中的值相匹配,如果它改變了innerHTML命中(這是一個X)。 (this)表示點擊的TD。你可以在這種情況下使用indexOf嗎?檢查該點擊的TD值是否與數組的值相匹配

function play() { 
      if ((this).value == shipLocations.indexOf((this).value)) { 
       (this).innerHTML = hit; 
      } 
     else { 
      (this).innerHTML = miss;  
     } 
    } 
+0

您是否收到任何錯誤? – BassT 2014-09-26 13:08:16

+0

我沒有收到任何錯誤。它跳到每個可能的可點擊td的else語句中。 – Chrillewoodz 2014-09-26 13:09:41

回答

2

<script> 
 
    var shipLocations = ["5"]; 
 
    function play(button) { 
 
     if (-1 != shipLocations.indexOf((button).value)) { 
 
      (button).innerHTML = "hit"; 
 
     } 
 

 
     else { 
 
      (button).innerHTML = "miss"; 
 
     } 
 

 
    } 
 
</script> 
 
<button value="5" onclick="play(this)">meh</button>

假定船舶位置存儲,而不是船對象

+0

我有點困惑,如何根據您的解決方案重新編寫我的條件?感覺你的IF應該返回「miss」而不是「hit」? – Chrillewoodz 2014-09-26 13:26:24

+0

-1表示找不到。所以基本上'如果('價值'不是「未找到」)...' – Oberst 2014-09-26 13:29:38

0

在我看來,你似乎在比較蘋果和橘子。 indexOf返回shipLocations數組中正在查找的值的索引,而不是存儲在陣列中的船的實際位置。

更新

的小提琴表演,那你也訪問的方式是錯誤的屬性。 下面是正確的方法:

if (parseInt((this).getAttribute("value")) == shipLocations[shipLocations.indexOf(parseInt(this.getAttribute("value")))]) { 
     (this).innerHTML = hit; 
} 

this指的是html元素,而不是一個JavaScript對象,在那裏你可以使用一個.訪問屬性。使用getAttribute("value")的作品。

旁註: 這些船有時被定位,以便他們「接觸」。我認爲這是非法;-)

+0

我也有這種感覺,但我不知道如何改變它,以便比較也是數組中項目的td的值? – Chrillewoodz 2014-09-26 13:12:49

+0

那麼,你需要使用你得到的索引,並檢索實際位置:'shipLocations [shipLocations.indexOf(this.value)]' – BassT 2014-09-26 13:14:25

+0

這使得每個點擊結果與一個命中而不是反之亦然。我會給你一個整件事的小提琴。 – Chrillewoodz 2014-09-26 13:17:45

相關問題