我一直在尝试用JavaScript编写游戏Battleship用于学校作业,而我却试图创建对手AI。当我点击网格中的单元格时,我创建了一个事件:
function addListener(evt) {
evt.addEventListener('click', function(){
//bunch of code
});
}
现在我每次在嵌套for循环中在网格中创建一个新单元格时运行此函数addListener
:
yourCell.setAttribute('id', evt + String(a) + String(b));
addListener(yourCell);
我现在想要的是对手在我轮到我的时候运行这个点击事件,所以我写这个只是为了测试fireEvent
功能:
function enemyTurn() {
document.getElementById('yourGrid00').fireEvent('onclick');
}
根据第二个代码示例,我将单元格的ID设置为'yourGrid00'
,我已经通过在运行JavaScript代码之后检查html代码来确认,并且函数enemyTurn()
在创建每个单元格并分配ID之前,它永远不会运行。
我不明白的是我在fireEvent
行上收到以下错误:
未捕获的TypeError:undefined不是函数。
有谁知道我做错了什么?
答案 0 :(得分:1)
fireEvent
是一种非常古老的方法,仅在Internet Explorer 8及更低版本上受支持。如果您想要处理最新的浏览器,则应使用dispatchEvent
。
在指定的
Event
调度EventTarget
,按适当的顺序调用受影响的EventListeners
。正常事件处理规则(包括捕获和可选冒泡阶段)适用于使用dispatchEvent()
手动分派的事件。
您必须手动创建Event
- 您不能只调用dispatchEvent('onclick')
。我从this answer中提取了以下代码的第一部分。
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0,
false, false, false, false, 0, null);
function enemyTurn() {
document.getElementById('yourGrid00').dispatchEvent(evt);
}