Вы должны использовать «click», а не «onclick». «on» используется только при установке его в качестве свойства (например, canvas.onclick = clickReporter).
canvas.addEventListener('click', clickReporter, false);
UPDATE
Подробнее о кликах и онкликах.
Существует три способа присоединить прослушиватель событий к объекту в JavaScript:
Через элемент .addEventListener. Когда вы используете это, вы указываете имя события, которое хотите установить. Например, «щелчок», или «наведение мыши», или «сенсорный запуск». В этом случае вы указываете фактическое имя события. Это полезно, потому что вы можете добавить более одного слушателя к событию.
canvas.addEventListener('click', clickReporter, false);
canvas.addEventListener('click', otherClickReporter, false);
// Both clickReporter and otherClickReporter will be called on a click event.
Через элемент .onsomeevent (onclick, onmouseover, ontouchstart). Это старое соглашение, которое полностью стандартно и поддерживается в HTML5. Это очень простой способ установить прослушиватель событий, но у него есть свои недостатки. С помощью этого метода можно одновременно установить только одного прослушивателя событий:
canvas.onclick = clickReporter;
canvas.onclick = otherClickReporter;
// Only otherClickReporter will be called on a click event.
Через сам HTML. Это где все конвенции начались. Вы можете определить событие непосредственно в HTML, очень как в предыдущем примере:
<canvas onclick="clickReporter()"></canvas>
Это то же самое, что и ниже, при условии, что clickReporter присоединяется к объекту окна.
<canvas></canvas>
<script>
canvasWeJustCreated.onclick = function() {clickReporter();}
</script>
Возможно, то, как вы это делаете, - лучший способ. Конечно, будут случаи, когда вы захотите использовать другие методы, например, при создании страницы на сервере или при попытке временно отключить прокрутку на iPhone, но для большинства приложений лучше всего использовать addEventListener.