value?value это значение элемента и, судя по всему, это элемент input, но у вас это div. Так откуда у блочного элемента взялось не существующее значение value?child? Которого тоже просто нет у html элементов.
let check = document.getElementById('added-service-calc'),
inp = document.getElementById('lustra-calc__quanity');
inp.addEventListener('input', function(e){
let val = parseInt(this.value);
(val > 0) ? (
this.value = val,
check.checked = true
) : (
this.value = 0,
check.checked = false
)
});
check.addEventListener('input', function(e){
inp.value = this.checked ? 1 : 0;
})
посылать второму пользователю событие getHistory по которому собирать все сообщения и пересылать их первому пользователю через событие setHistory и так восстановить историю
Хранить все с локал сторедже, но это сугубо в рамках демо и так себе идея.
localStorage или IndexedDB???
setInterval, setTimeout - 'это всё костыли ещё из прошлого века и никогда не буду советовать их использовать в данной задаче.

window.onload = function() {
/* код */
}window.addEventListener('load', function(e) {
/**
** Ваш код
**/
});
onchange="onCategoryChange(this)" class="categoryselect" multiple
Смотря что делает функция onCategoryChange
document, а надо искать.sub-menuтолько для той кнопки, к которой привязано данное субменю.Код html разметки бы посмотреть...