Autor Zpráva
hulk
Profil *
Zdravím, opět ze zvyku píšu sem. Mám malej problém a nechápu proč to nefunguje. Potřebuji aby se při zavolání přičetlo číslo, ale nevím z jakého důvodu to nefunguje. Ví někdo kde dělám chybu? Díky

function add(ks){
  x += ks + 1;
  alert("Výsledek "+x);
}
Joker
Profil
hulk:
Ono to funguje.
Pokud tedy v proměnné x je před voláním funkce nějaké číslo.
Jestli to v nějaké situaci „nefunguje“ vůbec (při volání funkce se nic nestane), tak nejspíš proto, že proměnná x neexistuje.
Jestli to „funguje“, ale vypisuje neočekávané výsledky (jako třeba NaN), tak proto, že v proměnné x není číslo.
juriad
Profil
Podařilo se mi vytvořit ukázku, kde ta funkce funguje. V tom kousku kódu není chyba. Problém nejspíš bude v místě, kde tu funkci voláš.
http://kod.djpw.cz/ggz
hulk
Profil *
Nefunguje :-)
Když by to bylo tak lehký, tak už to mám.


Upravil jsem to na:
function add(ks){
  var x = ks;
  x += x + 1;
  alert("Výsledek "+x);
}
Teˇuž dostávám sice výsledek, ale chci docílit přičítání. když kliknu, tak se zobrazí třeba 20 a když kliknu po druhé, tak 21. Tohle mi rozchodit nejde
margin
Profil *
http://www.it-joker.cz/Pocitace-weby/67-Nefunguje-to--aneb-jak-napsat-dotaz.html
Nefunguje je popis jak (cenzurováno).
Vyskočí aspoň alert? Pokud ano, co se vypíše? Co hlásí chybová konzola?
Uvítali bychom odkaz na živou ukázku.


hulk:
Já jsem sice lepič kódu, a ne programátor, ale uvědom si, co se stane, když deklaruješ proměnnou. Tu proměnnou by bylo vhodné deklarovat mimo funkci add.
hulk
Profil *
function add_all(ks,cena){
  var x = ks;
  x += x + 1;
  alert("Výsledek "+x);
}
Takhle jak to mám ted to vypíše pouze pevně číslo z ks. Pořád to přičítání nefunguje. Mám to na localhostu. Vím, localhost není výmluva. Mám si založit účet na freehostingu a dát to tam. Chápu a vím jak toto vlákno bude pokračovat, tak děkuju, ale vyřeším si to sám.
juriad
Profil
hulk:
var x = 0;
napiš mimo funkci add_all.
hulk
Profil *
margin:
Tu proměnnou by bylo vhodné deklarovat mimo funkci add
To máte pravdu, ale právě ve funkci mám zavolaný počet ke kterému potřebuju přičítat. Není to tak lehký


Už vím kde je problém a vzhledem k tomu, že to musí být přičítáno z funkce, tak je to nereálný a tak má práce je ukončená.
Joker
Profil
hulk:
právě ve funkci mám zavolaný počet ke kterému potřebuju přičítat
Jestli ta proměnná nemá na konci funkce zaniknout, musí být deklarovaná v globálním kontextu.

Ale globální proměnná nemusí být nutně deklarovaná mimo funkci, stačí ji pověsit na objekt window. Místo var x napsat window.x (a dát pozor, aby její název nepřepsal nějakou už existující vlastnost objektu window).
Kubo2
Profil
hulk, reakcia na [#4]:
Predstav si, že funkciu v [#4] zavoláš takto:
add(3);
Funkcia vo svojom kontexte vytvorí premennú x a priradí do nej hodnotu 3.
Nasleduje výraz:
// x += x + 1
x = 3 + 3 + 1;
Teda alert ti vyhodí niečo iné ako si očakával, namiesto x+1, čiže 4, dostaneš 2x+1, teda 7. Na to si treba dať pozor a naučiť sa základné operátory v JS a ich význam pochopiť.
Pozn.: k navýšeniu hodnoty premennej ti poslúži aj obyčajná inkrementácia:
++x; // to isté: x++
hulk
Profil *
Tak jsem to zkusil a nefunguje to. Vyhazuje mi výsledek 1 a to můžu klikat i 100x
function add_all(ks,cena){
  window.x = ks;
  x += x + 1;
  alert("Výsledek "+x);
}



Kubo2:
++x; // to isté: x++
Tohle jsem rozběhnul už nazačátku, ale jen pro můj test. Nic to neřeší protože chci potom přičítat i cenu a to tímhle spůsobem neudělám


Problém vyřešen a děkuju za pomoc. Chci se ještě zeptat zda existuje v js neco co vytvoří mezery? Třeba 1000 zobrazí na 1 000 a podobně.
Kubo2
Profil
hulk:
Problém vyřešen a děkuju za pomoc.
Aké je riešenie?

Chci se ještě zeptat zda existuje v js neco co vytvoří mezery? Třeba 1000 zobrazí na 1 000 a podobně.
Nie je to ťažké vytvoriť.

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:

0