• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Formatowanie cyfry na liczbę dwucyfrową

0 głosów
183 wizyt
pytanie zadane 11 lutego 2024 w JavaScript przez Piotrek2713 Mądrala (5,520 p.)
zamknięte 11 lutego 2024 przez Piotrek2713

Robię taki timer w javascript

const timer = document.querySelector('.timer');
const hours = document.querySelector('#timer-hours');
const minutes = document.querySelector('#timer-minutes');
const seconds = document.querySelector('#timer-seconds');
const alarm = new Audio ('timer.mp3');

function formatNumbers(e)
{
    e.preventDefault();
    const span = e.target;
    if (e.code == 'Delete')
    {
        span.textContent == '00';
        return;
    }

    if (/^\d$/.test(e.key))
    {
        const currentValue = span.textContent, inputValue = e.key;

        let newValue = parseInt(currentValue + inputValue);
        if (newValue > 99) newValue = newValue.toString().slice(-2);
        if (newValue > 59) newValue = inputValue;
        span.textContent = ('00' + newValue).slice(-2);
    }
}

function countDown()
{
    if (hours.textContent == 0 && minutes.textContent == 0 && seconds.textContent == 0)
    {
        alarm.play();
    }
    else
    {
        hours.setAttribute('contenteditable', 'false');
        minutes.setAttribute('contenteditable', 'false');
        seconds.setAttribute('contenteditable', 'false');
        seconds.textContent.toString().padStart(2, '0');
        if (seconds.textContent>0)
        {
            seconds.textContent--;
        }
        else
        {
            seconds.textContent = 59;
            if (minutes.textContent>0)
            {
                minutes.textContent--;
            }
            else
            {
                minutes.textContent = 59;
                if (hours.textContent>0)
                {
                    hours.textContent--;
                }
            }
        }
    }
    setTimeout('countDown()', 1000);
}
timer.addEventListener('keydown', formatNumbers);
window.addEventListener('keydown', (event) => {
    event.preventDefault();
    if (event.key === 'Enter')
    {
        countDown();
    }
})

funkcja formatNumber() działa prawidłowo.

Problem pojawia się dopiero z funcją

function countDown()
{
    if (hours.textContent == 0 && minutes.textContent == 0 && seconds.textContent == 0)
    {
        alarm.play();
    }
    else
    {
        hours.setAttribute('contenteditable', 'false');
        minutes.setAttribute('contenteditable', 'false');
        seconds.setAttribute('contenteditable', 'false');
        seconds.textContent.toString().padStart(2, '0');
        if (seconds.textContent>0)
        {
            seconds.textContent--;
        }
        else
        {
            seconds.textContent = 59;
            if (minutes.textContent>0)
            {
                minutes.textContent--;
            }
            else
            {
                minutes.textContent = 59;
                if (hours.textContent>0)
                {
                    hours.textContent--;
                }
            }
        }
    }
    setTimeout('countDown()', 1000);
}

a konkretnie z 

seconds.textContent.toString().padStart(2, '0');

Nie rozumiem czemu ta linijka nie działa. Robiłem też doklejanie zera z przodu do wartości seconds.textContent

if (seconds.textContent < 10)
{
     seconds.textContent = '0' + seconds.textContent;
}

I to też nie działa

komentarz zamknięcia: Problem rozwiązany.
komentarz 11 lutego 2024 przez Piotrek2713 Mądrala (5,520 p.)

Działający kod

const timer = document.querySelector('.timer');
const hours = document.querySelector('#timer-hours');
const minutes = document.querySelector('#timer-minutes');
const seconds = document.querySelector('#timer-seconds');
const alarm = new Audio ('timer.mp3');

function formatNumbers(e)
{
    e.preventDefault();
    const span = e.target;
    if (e.code == 'Delete')
    {
        span.textContent == '00';
        return;
    }

    if (/^\d$/.test(e.key))
    {
        const currentValue = span.textContent, inputValue = e.key;

        let newValue = parseInt(currentValue + inputValue);
        if (newValue > 99) newValue = newValue.toString().slice(-2);
        if (newValue > 59) newValue = inputValue;
        span.textContent = ('00' + newValue).slice(-2);
    }
}

function countDown()
{
    if (hours.textContent == 0 && minutes.textContent == 0 && seconds.textContent == 0)
    {
        alarm.play();
    }
    else
    {
        setTimeout('countDown()', 1000);
        hours.setAttribute('contenteditable', 'false');
        minutes.setAttribute('contenteditable', 'false');
        seconds.setAttribute('contenteditable', 'false');
        if (seconds.textContent>0)
        {
            seconds.textContent--;
        }
        else
        {
            seconds.textContent = 59;
            if (minutes.textContent>0)
            {
                minutes.textContent--;
            }
            else
            {
                minutes.textContent = 59;
                if (hours.textContent>0)
                {
                    hours.textContent--;
                }
            }
        }
    }
    if (seconds.textContent < 10 && seconds.textContent > 0)
    {
        seconds.textContent = '0' + seconds.textContent;
    }
    else if (seconds.textContent == 0)
    {
        seconds.textContent = '00';
    }
    // if (seconds.textContent < 10 && seconds.textContent > 0)
    // {
    //     seconds.textContent = '0' + seconds.textContent;
    // }
    // else if (seconds.textContent == 0)
    // {
    //     seconds.textContent = '00';
    // }
    // if (seconds.textContent < 10 && seconds.textContent > 0)
    // {
    //     seconds.textContent = '0' + seconds.textContent;
    // }
    // else if (seconds.textContent == 0)
    // {
    //     seconds.textContent = '00';
    // }
}
timer.addEventListener('keydown', formatNumbers);
window.addEventListener('keydown', (event) => {
    event.preventDefault();
    if (event.key === 'Enter')
    {
        countDown();
    }
})

 

Podobne pytania

+1 głos
1 odpowiedź 2,361 wizyt
pytanie zadane 26 grudnia 2020 w C i C++ przez doggy_ Nowicjusz (150 p.)
0 głosów
3 odpowiedzi 5,463 wizyt
0 głosów
2 odpowiedzi 395 wizyt
pytanie zadane 5 września 2018 w JavaScript przez Bakr Mądrala (6,850 p.)

93,630 zapytań

142,551 odpowiedzi

323,053 komentarzy

63,134 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1936p. - dia-Chann
  2. 1916p. - DziarnowskiJ
  3. 1886p. - Łukasz Piwowar
  4. 1868p. - CC PL
  5. 1842p. - Maurycy W
  6. 1841p. - raydeal
  7. 1840p. - Adrian Wieprzkowicz
  8. 1782p. - rucin93
  9. 1777p. - robwarsz
  10. 1743p. - Michal Drewniak
  11. 1701p. - rafalszastok
  12. 1588p. - Tomasz Bielak
  13. 1491p. - Rafał Trójniak
  14. 1257p. - ssynowiec
  15. 1208p. - Mariusz Fornal
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...