Autor Zpráva
Joan
Profil
Kvůli hladkému chodu svého minutkového skriptu potřebuji vykoumat už jen dvě věci:

1) v případě odklepnutí prázdného políčka se zobrazí Alert s žádostí o zadání počtu vteřin - to je OK. A v okamžiku odklepnutí Alertu se v odpočítávacím políčku ukáže výrazným písmem "NaN". Zkoušela jsem viditelnost NaN schovat pomocí
document.getElementById("sekundy").innerHTML.style.display = "none";
ale hlásí mi to chybu, nechá mě zmizet pouze celý prvek (tj. bez innerHTML), což je špatně.
Ani typeof jsem asi nepoužila správně, pokud to vůbec přes něj jde.

2) přestože když zadám hned napoprvé správně hodnotu proměnné "c", do které ukládám odpočítávaný čas vložený uživatelem, tak Alert vyskakuje, přestože by neměl. Zkusila jsem po Alertu následující kód
 if(!zapnuto)
        {
        zapnuto = true;
        c = parseInt(document.fm.zadano.value);  
        document.fm.sekundy.value = c;
        c--;   
        t = setInterval(pocitej, 1000);
        }


obalit
if(c)  {....}
ale tím jsem odpočítávání uťala, takže tudy cesta nevede.
Mohu poprosit ještě o nápovědu? Díky předem!
Witiko
Profil
Ale innerHTML je jen atribut, který navrací text. Stylovat můžeš jen elementy, tzn. atribut style mají logicky jen elementy. Pokud chceš skrýt obsah pole, zbývá ti jen smazání value.

Jinak co třeba nějak ošetřit, jestli je zadaný text číslo? Funkci isNaN neznáme? Nemám nic proti alchymii a objevování kola, ale co třeba si před programováním získat alespoň základní přehled všech funkcí v javascriptu? Není nutné si je pamatovat, jen je fajn o jejich existenci vědět. Ukázka:
function funkce() {
  var text = parseInt(prompt("Kolik je ti let?",""));
  if(isNaN(text)) {
    alert("To nebylo žádné číslo!");
    return funkce();
  } else {
    ...
  }
}

Funkce isNaN navrátí true / false na základě toho, je / není-li jejím argumentem číslo. Tím si můžeš problematiku zadaného čísla ošetřit.
Joan
Profil
Witiko:
"ale co třeba si před programováním získat alespoň základní přehled všech funkcí v javascriptu?"
Máš samozřejmě naprostou pravdu! Evokuje mi to ale představu technického antitalentu postaveného doprostřed skvěle vybavené dílny s tím, že přece teď už musí vědět kdy a jaké nařadí na co použít. Nemusí, u mě je to totiž obdobné: netrklo mě, že jsem si měla napřed ověřit existenci vstupu číslo vs. nečíslo. A přitom je to jasné jak slunce - teď, když jsi mi napověděl.
Přesto Ti moc děkuji, u podobných operací mě už nabeton napadne si toto ověřovat.
Hezký večer.
Witiko
Profil
Já to říkám ne protože bych z toho měl despotickou radost, ale protože vím, že bez znalosti alespoň referenční se pracovat nedá. To je jako učit se gramatiku jazyka a neznát slovní zásobu. Říkám to proto, že jít na to obráceně režimem samouk je zbytečně zdlouhavé, neefektivní, sám jsem to podstoupil a nikomu to nepřeju. :(
Joan
Profil
Witiko:
"jít na to obráceně režimem samouk je zbytečně zdlouhavé"
To je zajisté úplná pravda, akorát jedna věc je o něčem vědět a druhá věc umět to použít :-) . Potřebovala jsem vlastně především pochopit, že MUSÍM ošetřit vstup coby ne-číslo. Byla to dřina, ale podařilo se mi! Mile mě přitom překvapilo, že se mi kamsi ztratilo nepěkné zobrazování toho NaN, přitom stylováním to není! Poslední oříšek bylo správně nahodit závorky: dlouho mi skript běhal závodní rychlostí až hluboko do mínusu při vložení správné číselné hodnoty PO schválně špatném vložení. Stačilo posunout uzavírací složenou závorku u ELSE ve funkci "Spust".

P.S.: Tvůj ukázkový skript na isNaN na obrazovce nezobrazuje vůbec nic, pokud je prompt UVNITŘ funkce - má to tak opravdu být? Já jsem totiž taky dlouho řešila nezobrazování Alertu, ale nakonec začal vyskakovat (škoda jen, že jsem nepostřehla, kde byla chyba)
Pěkný den.
Witiko
Profil
Joan:
Možná protože ten kód je schématický, místo tří teček má být nějaký kód, který se provede následovně a hlavně se musí funkce funkce zavolat, aby se vůbec něco dělo.

Joan:
že se mi kamsi ztratilo nepěkné zobrazování toho NaN
Ono programování může být umělecká práce, nicméně zlaté pravidlo praví, že pokud už nikdo jiný, tak alespoň programátor musí ve svém programu vidět perfektní logiku a musí chápat, jak funguje (pro zachování znalosti pomáhají komentáře a přehledné formátování). Z tvých příspěvků získávám dojem, jako bys něco psala a pak se podivovala nad tím, co to dělá, přičemž když to nic nedělá, tak naslepo upravuješ? To přece nemůže fungovat.

Zobrazování zadané hodnoty přece v tom scriptu někde máš, stačilo před vypsáním kontrolovat, jedná-li se o číselnou hodnotu (tzn. nespustit odpočítávání pokud nebylo zadáno číslo).

pokud je prompt UVNITŘ funkce - má to tak opravdu být?
Prompt není uvnitř funkce, předávám funkci jako argument návratovou hodnotu funkce jiné. Základy syntaxe. Ukázka:

function secti(cislojedna, cislodva) {
  return cislojedna + cislodva;
}

alert(Math.pow(secti(1,2),2)); // 1 + 2 = 3; 3^2 = 9; alert(9);
Joan
Profil
Witiko:
"když to nic nedělá, tak naslepo upravuješ"
Když už nevím, kudy kam, tak zkouším, co to udělá, ale rozhodně nad skriptem hodně přemýšlím a zcela naslepo nedělám nic. A taky si pak většinou i zpětně vysvětlím, proč to tak asi má být. Stejně tak nabiflovaný anglický slovník mě nenaučí skládat srozumitelné věty, toho dosáhnu až po čase praxe. Řekla bych, že v programování je to ještě těžší (a taky už nejsem nejmladší ;-) ). Ale BAVÍ mě to velmi a mám velikou MOTIVACI se JS aspoň trochu naučit a to je myslím hodně důležité.
Ten skript na odpočet jsem hodně potřebovala, už jsem s ním spokojená, tak se mohu pustit do něčeho jednoduššího. Díky za Tvůj čas a trpělivost :-)
Witiko
Profil
Přeju hodně zdaru při budoucím programování! :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: