我一直在尝试用JavaScript制作《战舰》游戏来进行学校作业,但我一直努力尝试创建对手AI。我在单击网格中的单元格时创建了一个事件:

function addListener(evt) {
    evt.addEventListener('click', function(){
        //bunch of code
    });
}

现在,每次在嵌套的for循环中的网格中创建新单元格时,我就运行此函数addListener:
yourCell.setAttribute('id', evt + String(a) + String(b));
addListener(yourCell);

我现在想要的是让对手在转弯时运行此click事件,因此我编写此代码只是为了测试fireEvent函数:
function enemyTurn() {
    document.getElementById('yourGrid00').fireEvent('onclick');
}

根据第二个代码示例,我将单元格的ID设置为'yourGrid00',这是通过在运行JavaScript代码后检查html代码来确认的,并且enemyTurn()函数将永远不会在创建和分配每个单元格之前运行一个ID。

我不明白的是,我在fireEvent行上收到以下错误:



有人知道我在做什么错吗?

最佳答案

fireEvent是一种非常老的方法,仅在Internet Explorer 8及更低版本中受支持。如果要处理最新的浏览器,则应改用 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

08-17 13:17