Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   При клике слово меняет цвет а число увеличивается на 1, но есть недоработка (https://javascript.ru/forum/misc/77326-pri-klike-slovo-menyaet-cvet-chislo-uvelichivaetsya-na-1-no-est-nedorabotka.html)

Lefseq 19.04.2019 11:59

При клике слово меняет цвет а число увеличивается на 1, но есть недоработка
 
Здравствуйте. Помогите доработать код.

Нажимаем на любую из надписей Пуск, надпись становится красной, а рядом стоящее число увеличивается на один, при повторном нажатии все возвращается на исходное положение. Все действия запоминаются в куках браузера пользователя и отображаются при повторных заходах или обновлениях страницы.

Так все и происходит, но если я нажимаю один раз Пуск, чтобы он стал красным, перезагружаю страницу, потом в коде меняю число у того спана по которому кликал, перезагружаю страницу и кликаю несколько раз по тому же спану по которому кликали в самом начале. То число просто идет на уменьшение.

<div class="myClass">
<span class="pusk">пуск</span>
<span class="num">25</span>
   
<span class="pusk">пуск</span>
<span class="num">30</span>
   
<span class="pusk">пуск</span>
<span class="num">50</span>
</div>


<script>
let myClass = document.querySelector('.myClass'), arr = [];
for(let e of myClass.querySelectorAll('.num')) arr.push(e.innerText);

let old = JSON.parse(localStorage.getItem('some'));
if(old) myClass.innerHTML = old.html;

myClass.addEventListener('click',e => {
if(e.target.classList.contains('pusk')){
let it = e.target;
let i = [...myClass.querySelectorAll('.pusk')].indexOf(it);
it.nextElementSibling.innerText == arr[i] ? 
(++it.nextElementSibling.innerText, it.style.color = 'red') :
(--it.nextElementSibling.innerText, it.style.color = '');
}
});

window.addEventListener('beforeunload',()=> localStorage.setItem('some',JSON.stringify({html : myClass.innerHTML})) );
</script>

рони 19.04.2019 14:31

Lefseq,
<!DOCTYPE html>

<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">

</head>

<body>
<div class="myClass">
<span class="pusk">пуск</span>
<span class="num">25</span>

<span class="pusk">пуск</span>
<span class="num">30</span>

<span class="pusk">пуск</span>
<span class="num">50</span>
</div>
<script>
let myClass = document.querySelector('.myClass'),
    num = [...myClass.querySelectorAll('.num')],
    pusk = [...myClass.querySelectorAll('.pusk')];
let old = JSON.parse(localStorage.getItem('somme') || '{}');
Object.keys(old).forEach(i => {
    ++num[i].textContent;
    pusk[i].style.color = 'red'
});
myClass.addEventListener('click', e => {
    if (e.target.classList.contains('pusk')) {
        let it = e.target;
        let i = pusk.indexOf(it);
        if (old[i]) {
            --num[i].textContent;
            pusk[i].style.color = '';
            delete old[i]
        } else {
            ++num[i].textContent;
            pusk[i].style.color = 'red';
            old[i] = true
        }
        localStorage.setItem('somme', JSON.stringify(old))
    }
});
</script>

</body>
</html>

Lefseq 19.04.2019 16:43

рони,
Спасибо, работает!


Часовой пояс GMT +3, время: 05:30.