Измените это:
var cell = row.insertCell();
var button = cell.appendChild(document.createElement('button'));
var buttID = String('butt' + '_' + x + '_' + y);
button.setAttribute('id', 'buttID');
button.setAttribute('onclick', 'mark()');
На это:
var cell = row.insertCell();
// Store the reference to the actual button and not the cell that contains it
var button = document.createElement('button');
// Bind the onclick event of the button to your mark function
// Also remember that you only need the parenthesis if you are calling a function, here we are only passing it
button.onclick = mark;
// Add your button to your table cell
cell.appendChild(button);
Вам также придется отредактировать функцию отметки, чтобы она выглядела так:
function mark(e){
e.target.style.background = 'red';
}
Это может показаться запутанным, и вы, вероятно, спросите, откуда взялась эта переменная 'e'. Обычно такие события, как onclick, всегда передают объект события своим функциям обработки. Если поместить переменную в скобки функций обработки, объект события будет автоматически помещен в эту переменную.
Объект события содержит много информации о событии. Вы можете увидеть всю информацию, которую он предоставляет здесь . То, что нам нужно, это «цель» - элемент, вызвавший событие, которым будет любая кнопка, на которую в данном случае была нажата кнопка. Целью является элемент HTML, поэтому мы можем установить для него style.background значение 'red'.