О, пришла в голову еще одна идея. Можно ли сделать так:
Ищем все элементы canvas (не по id, а именно сами canvas) и запихиваем их в массив canvas'oв, т.е. вместо
var canvas = document.getElementById('canvas');
будет что-то вроде
var canvas = [canvas1,canvas2,canvas3...]
А затем, уже анализировать - сколько их, создавать соответствующее кол-во массивов, и обработчиков? Ну т.е. обработчик все же делать 1, в котором смотреть просто какой конкретно элемент его вызвал?