inputElement.removeEventListener("keydown", ...);
inputElement.removeEventListener("blur", ...);
if (query.length < 3) {
return;
}
и другиеif (!inputElement) return;
//****
// CKEditor
ClassicEditor.create($('#data')[0], {
htmlSupport: { allow: htmlSupport },
removePlugins: [ 'Link', 'SourceEditing' ],
plugins: [ PasteFromOffice],
fontSize: { options: [ 8, 10, 12, 14, 18, 20, 24, 28, 36 ] },
})
.then(editor => {
CKEditor = { field: 'data', data : editor };
})
.catch(error => {
console.error(error);
});
document.addEventListener('keydown', e => {
e.preventDefault();
return false;
});
document.addEventListener('keydown', e => {
if (e.key === 'ArrowDown') {
e.preventDefault();
//Ваша логика
return false;
}
});
const autoBtns = document.querySelectorAll('.block-tabs-main-home__item');
autoBtns.forEach(
btn => {
btn.addEventListener("click", (e) => {
const contentId = btn.getAttribute("data-content-id");
document
.querySelectorAll(`[data-id="${contentId}"], .fits-cars-showmore-content_active`)
.forEach( (el) =>
el.classList.toggle('fits-cars-showmore-content_active')
)
}
);
}
);
//Объекты обычно объявляют как константы, чтобы случайно не переписать сам объект
//при это свойства объекта менять можно
//потому что константа это значение переменной - ссылка на объект в памяти
const existence1= {
value: false
};
function addcartProduct (num) {
if (num.value) {console.log('+1')}
else {
console.log(num)
num.value = true;
}
}
//false
console.log(existence1.value)
addcartProduct(existence1);
//true
console.log(existence1.value)
const standart = moment().tz("Europe/Moscow");
const nowDay = moment(standart, 'YYYY-MM-DD HH:mm');
const eventDay = moment('2023-05-21 02:05', 'YYYY-MM-DD HH:mm');
const countDown = () => {
const timers = moment(nowDay, 'YYYY-MM-DD HH:mm')
.countdown(eventDay, "YYYY-MM-DD HH:mm");
console.log(timers.value)
if(interval && timers.value <= 0) {
clearInterval(interval)
}
console.log(timers.toString())
}
const interval = setInterval(countDown, 1000);
pointer-events: none;
, а потом для нужных элементов включать, в данном случае для canvasFluid: pointer-events: all;
document.querySelector('[d="M5.293 8.293a1 1 0 0 1 1.414 0L12 13.586l5.293-5.293a1 1 0 1 1 1.414 1.414l-6 6a1 1 0 0 1-1.414 0l-6-6a1 1 0 0 1 0-1.414Z"]').parentElement.parentElement;
//Данные по содержанию меню
const furnTypes = [
{
'id' : 1,
'title' : 'Офисная <span>меб</span>ель'
},
{
'id' : 2,
'title' : 'Техника / сантехника'
},
{
'id' : 3,
'title' : 'Сборка кухни'
},
];
//Каждое активно может быть только один раз
const activeMenuItems = new Set();
const clickHandler = e => {
if(activeMenuItems.add(parseInt(e.target.getAttribute("furn-id"))) ) {
//Если поменялся перестроим меню
updateActiveMenuItems(activeMenuItems);
}
};
//Строим меню на основе данных items, вставляем в target
//на элементы вешаем событие clickHandler
buildSelectMenu = (target, items, clickHandler) =>
{
//создаем родителя
const parentUl = document.createElement("ul");
parentUl.classList.add('types-select__options');
//Каждый из пунктов
items.forEach(
item => {
const childLi = document.createElement("li");
childLi.classList.add('types-select__option');
childLi.setAttribute('furn-id', item['id']);
childLi.addEventListener("click",clickHandler);
const childTextBlock = document.createElement("div");
childTextBlock.classList.add('types-select__option-text');
// Лучше потом на setHtml заменить, но пока нет поддержки
childTextBlock.innerHTML = item['title'];
childLi.appendChild(childTextBlock);
parentUl.appendChild(childLi);
}
)
//Запихиваем туда куда нужно
target.appendChild(parentUl);
return parentUl;
}
const updateActiveMenuItems = ids => {
const parent = document.querySelector('.types-select__active-items');
parent.innerHTML = '';
ids.forEach( id => {
const curItem = furnTypes.find( el => el['id'] === id)
const activeMenuItemEl = document.createElement("div");
const activeMenuItemTitleEl = document.createElement("span");
activeMenuItemTitleEl.innerHTML = curItem['title'];
const activeMenuItemdeleteButtonEl = document.createElement("button");
//Лучше через текстовую ноду
activeMenuItemdeleteButtonEl.innerHTML = 'x';
activeMenuItemdeleteButtonEl.setAttribute('active-furn-id', curItem['id']);
activeMenuItemdeleteButtonEl.addEventListener("click", e => {
//Чтобы кликалась не взирая на клик событие родителя
if(e && e.stopPropagation) e.stopPropagation();
if(activeMenuItems.delete(parseInt(e.target.getAttribute("active-furn-id"))) ) {
//Если поменялся перестроим меню
updateActiveMenuItems(activeMenuItems);
}
});
activeMenuItemEl.appendChild(activeMenuItemTitleEl);
activeMenuItemEl.appendChild(activeMenuItemdeleteButtonEl);
parent.appendChild(activeMenuItemEl);
})
}
// Строим меню
const furnitureMenu = buildSelectMenu(
document.querySelector('#furnitureMenu'),
furnTypes,
clickHandler
);
document.querySelector('.types-select__btn')
.addEventListener("click", e => {
// Странное имя класса, наверное должн быть types-select__menu_active
document.querySelector('.types-select__menu').classList.toggle("_active");
} )
//Создаем энкодер, который нам сделает ArrayBuffer в utf8
//Без параметра будет кодировка UTF8
const encoderUTF8 = new TextEncoder();
//Закодируем строку
const arrayUTF8 = encoderUTF8.encode("Привет!");
//Теперь создадим декодер в cp1251, список кодировок и их метки здесь
// https://developer.mozilla.org/en-US/docs/Web/API/Encoding_API/Encodings
let encToCP1251 = new TextDecoder('cp1251');
//Получаем строку в нужной кодировке
const strCP1251 = encToCP1251.decode(arrayUTF8);
//Генерируем URL
const url = URL.createObjectURL(
//Создаем файл
new File([strCP1251], "foo.txt", {
type: "text/plain",})
);
//Создаём ссылку
let aElement = document.createElement('a');
aElement.href = url;
aElement.download = 'filenameCP1251.txt';
aElement.textContent = 'Скачай меня полностью!';
document.body.appendChild(aElement);