О каких элементах идёт речь, какой класс надо добавлять, максимально допустимое количество элементов с классом, что делать в случае попытки добавления класса сверх лимита:
const itemSelector = '.item';
const activeClass = 'active';
const activeSelector = `${itemSelector}.${activeClass}`;
const maxActive = 3;
const onMaxActiveClick = () => alert(`больше ${maxActive} нельзя`);
Слушать клики можно непосредственно на элементах:
let numActive = 0;
for (const n of document.querySelectorAll(itemSelector)) {
n.addEventListener('click', onClick);
numActive += n.matches(activeSelector);
}
function onClick() {
if (numActive < maxActive || this.matches(activeSelector)) {
numActive += this.classList.toggle(activeClass) ? 1 : -1;
} else {
onMaxActiveClick();
}
}
Или на каком-нибудь их общем предке:
document.addEventListener('click', ({ target: t }) => {
if (t = t.closest(itemSelector)) {
const { length } = document.querySelectorAll(activeSelector);
if (length < maxActive || t.classList.contains(activeClass)) {
t.classList.toggle(activeClass);
} else {
onMaxActiveClick();
}
}
});