Из кода на вашей странице я вижу, что вы используете innerHTML += ...
для добавления новых изображений - это не очень хорошая вещь, потому что браузер воссоздает все внутренние элементы каждый раз, когда вы это делаете, и это может вызывать странные взаимодействия с обработчиками событий.
Рассмотрите возможность использования методов DOM для создания и добавления элементов, например:
var e = document.createElement('img');
e.id = id;
e.onclick = pieceClicked; // No parameter required, this.id is available directly inside the function
...
board.appendChild(e);
Некоторые другие примечания:
Вы используете xPix * yPix
как часть идентификатора: если вы ожидаете, что он будет уникальным, это может быть не так. Например, x = 500, y = 10
и x = 10, y = 500
приведут к одному и тому же идентификатору. Как насчет простого использования xPix + ',' + yPix
как строки?
Несколько строк, в которых вы инициализируете Pieces[id]
, могут быть уменьшены до более простой формы с помощью обозначения объекта: Pieces[id] = { Piece: ..., xPix: ..., yPix: ... }
.