Собственно input'ов тоже больше 1 не надо. Юзер щелкает в ячейке и получает это поле с кнопками там где щелкнул.
Начинается канонично:
addEvent(this.table, "click", function(e) {
var cell = e.target || e.srcElement; // clicked cell
var row = cell.parentNode;
if ( this.header.isEqualNode(row) || this.footer.isEqualNode(row) ) {
mod_key = 0;
this.toggle_row(0);
} else {
this.toggle_row(row.rowIndex); // change selected
}
return false;
}.bind(this));
Это для всей строки, то есть для каждой ячейки свое поле которое может быть какого угодно типа. Например радио, список, список-один, текстареа, текст и тп. Для одноклеточного редактирования все в стопицот раз проще.