2014-09-26 63 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

相关问题