169 похожих чатов

👋 Есть три кнопки, с помощью замыкания нужно показывать на самой

кнопке количество нажатий на каждую из них.

const parent = document.querySelector('.wrapper');

function closure() {
let count = 0;
return function() {
count++;
this.innerText = count;
}
}

let a = closure();

parent.addEventListener('click', (e) => {
a.call(e.target);
})

сейчас у меня count является одним счетчиком для трех кнопок, как я могу сделать, чтобы у каждой кнопки был свой count ?
и чтобы код был гибким и не плодить слушатели событий?

23 ответов

20 просмотров

ну так что значит не плодить, если вам нужно на каждую кнопку?)

Леша- Автор вопроса
i7 4n
ну так что значит не плодить, если вам нужно на ка...

я вот и спрашиваю, может есть более лаконичный способ решить такую задачу, о которм я не знаю

На контейнер повесить слушатель, а не на каждую кнопку

Владимир
На контейнер повесить слушатель, а не на каждую кн...

там так и есть, внимательнее, молодой человек

Леша- Автор вопроса
Леша
слушатель и так на контейнере

А зачем лаконичнее? Для себя?

Леша
конечно)

а замыкание зачем вам всё-таки

Леша- Автор вопроса
i7 4n
а замыкание зачем вам всё-таки

нашел у себя большой пробел по ним, пробую решать

Леша
конечно)

Есть очень сложный ответ на твой вопрос) Не надо лаконичнее, поверь. Если не лень почитать могу скинуть материал по теме.

Леша
давай)

На англ. правда https://overreacted.io/goodbye-clean-code/

function closure() { const counter = new Map(); return function() { if (counter.has(this)) { counter.get(this).val++; } else { counter.set(this, { val: 1 }); } this.textContent = counter.get(this).val; } } const parent = document.querySelector('.wrapper'); const counter = closure(); parent.addEventListener('click', ({ target }) => counter.call(target)); такое, мб, проканает. но можно и покрасивше написать

Леша- Автор вопроса
i7 4n
function closure() { const counter = new Map(); ...

рил сложно для меня) буду разбираться, спасибо)

Леша
рил сложно для меня) буду разбираться, спасибо)

я там чуть ещё подрихтовал, чтоб чуть приятнее стало. проверьте, работает ли

Леша
работает прекрасно)

а, ну ок, потому что я ничё не проверял хд

i7 4n
function closure() { const counter = new Map(); ...

Слушай, а зачем counter.call? Что если без this и в closure передавать event? Тогда прям совсем красиво будет)

Владимир
Слушай, а зачем counter.call? Что если без this и ...

я взял оригинальное решение, не более. сам бы я и сделал, чтоб он элемент принимал

function Counter() { const _counter = new Map(); return { count(element) { _counter.set(element, _counter.has(element) ? _counter.get(element) + 1 : 1); return _counter.get(element); }, get counter() { return _counter } }; } const counter = Counter(); document.querySelector(".wrapper").addEventListener("click", ({ target }) => { target.textContent = counter.count(target); console.log(counter.counter); }); но в итоге я бы +- так написал, потому что у вас очевидное нарушение SRP было. и не должна была та фигня отвечать за отрисовку над названиями, мб, стоит поработать, но это уже другой вопрос)

Леша- Автор вопроса
i7 4n
function Counter() { const _counter = new Map();...

const btns = document.querySelectorAll('.btn'); function closure() { let count = 0; return function() { count++; this.innerText = count; } } btns.forEach(e => { e.addEventListener('click', closure()); })

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта