javascript - 当战舰游戏结束时,如何从所有 <tds> 中删除事件监听器?

标签 javascript

所以我一直在开发战舰游戏,但遇到了一个无法解决的问题。当找到所有 8 艘船后,我想提醒一条获胜消息,即玩家获胜之前发射的总枪数。然后我想删除进一步单击代表方 block 的 tds 的功能,从而模拟“游戏结束”。下面的代码仅阻止警报多次显示,但您仍然可以单击方 block 以执行其他一些代码。我想摆脱这个。如何选择所有 td 元素并使附加到单击事件的所有代码停止工作?也许有比这更简单的方法来创建“游戏结束”?如有任何帮助,我们将不胜感激。

编辑这是一个 fiddle :http://jsfiddle.net/pfb8dc83/1/

if (hitsCounter == 8) {
    alert('Congratulations! You sank all battleships!');
    alert('You fired ' + totalShots + ' rounds before you won the battle of the sea.');
    var all = document.getElementsByTagName('table')[0].getElementsByTagName('td');
    all.length.removeEventListener('click', play); //getting an error here saying it's not a function, because of the .length probably. 
}

最佳答案

向每个 td 添加事件监听器是非常糟糕的做法,恕我直言。

尝试稍微更改您的代码,仅将一个事件监听器附加到表主体,并更改 click 回调以找出 event.target,这将是您的 td

这将使您的代码更快,并且您可以通过从中删除监听器来从所有td中删除监听器。

这是您的代码,略有更改

http://jsfiddle.net/bd07hy5g/1/

关于javascript - 当战舰游戏结束时,如何从所有 <tds> 中删除事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26072240/

相关文章:

javascript - 无法使用streams/highland.js从结果中从mongodb获取数据

javascript - 解释每个参数

javascript - Express-validator 的默认 sanitizer 在链接时不起作用

javascript - 错误: No default engine was specified and no extension was provided.简单路由

javascript - 在 jQuery 中将鼠标悬停在子菜单上时无法保留子菜单

javascript - 一个简单的 Solidity 合约和脚本的无效操作码错误

javascript - 从 URL 中删除最后两个参数

javascript - 解码 Javascript 文件中函数的变量名

javascript - 在文本框中粘贴某些文本时是否检查数字(没有设置超时)

javascript - 在 react js中更新对象数组中的值