JavaScript fireEvent不是一个函数?

时间:2014-10-13 08:43:22

标签: javascript html css

我一直在尝试用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不是函数。

有谁知道我做错了什么?

1 个答案:

答案 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);
}

JSFiddle demo