Veľkonočná akcia je tu a s ňou aj extra kredity ZADARMO na náš interaktívny e-learning. Dobij si teraz kredity a posuň sa vo svojej kariére vpred!
Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Diskusia – 15. diel - Základy práce s DOM a udalosti v JavaScripte

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Odpovedá na Pluhtík
Michal Žůrek - misaz:27.6.2018 20:22

Tak jak se to snažíš udělat je to složitější, musí se použít sofistikována funkce metoda bind. Správně je to

sum.onclick = after_Button.bind(null, 1, num1, num2);
sub.onclick = after_Button.bind(null, 2, num1, num2);
mul.onclick = after_Button.bind(null, 3, num1, num2);
div.onclick = after_Button.bind(null, 4, num1, num2);
pow.onclick = after_Button.bind(null, 5, num1, num2);

pak je jště tomu potřeba přizpůsobit

function after_Button(type, n1, n2) {
    document.write("<h1>Vysledek je: </h1>");
    if (type == 1)
        document.write(n1.value + n2.value);
    else if (type == 2)
        document.write(n1.value - n2.value);
    else if (type == 3)
        document.write(n1.value * n2.value);
    else if (type == 4)
        document.write(n1.value / n2.value);
    else
        document.write(Math.pow(n1.value, n2.value));
}

Jednodušší je to dělat jako ukazuje článek.

 
Odpovedať
27.6.2018 20:22
Avatar
Pluhtík
Člen
Avatar
Odpovedá na Michal Žůrek - misaz
Pluhtík:27.6.2018 20:24

Jsi si jistý, že má být n1.value atd.? Podívej se ještě jednou na můj kód - už jsem tam n1.value přímo přetypoval na integer.
Můžu vědět, co přesně dělá metoda bind?

 
Odpovedať
27.6.2018 20:24
Avatar
Odpovedá na Pluhtík
Michal Žůrek - misaz:27.6.2018 20:29

jo jsem si naprosto jist. Metodě nepředáváš hodnotu elementu, ale samotný element, proto při výpočtech musíš přečíst hodnotu z elementu, který ti to předalo v parametrech. Metoda bind vytváří kopii funkci a nahrazuje kontext volání za první parametr a další parametry pak odpovídají parametrům při volání. Kontext volání nepoužíváš, tak jsem tam dal null. Celkově to je poměrně složitý přístup.

 
Odpovedať
27.6.2018 20:29
Avatar
Odpovedá na Pluhtík
Michal Žůrek - misaz:27.6.2018 20:34

problém je v tom, že ty jsi tu funci nenastavoval jako událost ale ihned si ji volal.

sleduj rozdíl mezi tímto:

aaaa.onclick = funkce;

a

aaaa.onclick = funkce();

to první nastaví funkci jako událost kliknutí, ale nezavolá ji. Zavolá ji až jádro prohlížeče v okamžiku kdy klikneš na tlačítko. V druhém případě to funci zavolá hned a jako událost onclick to nastaví to, co funkce vrátí. Tvá funkce nevrátí nic, takže to žádnou událost nenastaví. To co chceš je případ 1, jenže tím že tam nemáš žádné závorky, potažmo ani parametry, tak si je tam musíš "dolepit" a přesně toto dělá funkce bind. Ona ti je přilepí aby tam byly a zároveň jsi to nevolal hned.

 
Odpovedať
27.6.2018 20:34
Avatar
Pluhtík
Člen
Avatar
Odpovedá na Michal Žůrek - misaz
Pluhtík:27.6.2018 20:37

Ano, já vím, došlo mi to.

Tak jinak. Není snad hodnotou elementu string? A jestli ano, tak n1.value mi nepomůže dosáhnout kalkulačky (přinejmenším ne takové kalkulačky, kterou bych mohl reálně použít na práci s čísly), nebo se mýlím?

Já mám v kódu

num1 = document.getElementById('n1');
num2 = document.getElementById('n2');
num1 = parseInt(num1.value);
num2 = parseInt(num2.value);

Aha, tak už vidím, proč jsem tě zmátl. Já omylem nepoužíval num1, num2 v té funkci, ale pouze n1, n2.
Bude tedy můj kód korektní za předpokladu, že doplním metodu bind a n1, n2 uvnitř funkce nahradím proměnnýma num1 a num2?

 
Odpovedať
27.6.2018 20:37
Avatar
Pluhtík
Člen
Avatar
Odpovedá na Pluhtík
Pluhtík:27.6.2018 20:47

Blbost, to ty jsi zmátl mě :D n1 a n2 jsou parametry funkce. Takže s num1 a num2 reálně pracuji, protože jsem je zadal jako parametry n1 a n2.

 
Odpovedať
27.6.2018 20:47
Avatar
Odpovedá na Pluhtík
Michal Žůrek - misaz:27.6.2018 21:01

aha, takže odmaž

num1 = parseInt(num1.value);
num2 = parseInt(num2.value);

a ve výpočtu nahraď n1.value za parseInt(n1.value)

 
Odpovedať
+1
27.6.2018 21:01
Avatar
Pluhtík
Člen
Avatar
Odpovedá na Michal Žůrek - misaz
Pluhtík:27.6.2018 21:04

Děkuji, udělal jsem to asi minutu předtím :) každopádně s metodou bind jsi mi pomohl (vím, že to první poděkování může vyznít ironicky, není to ironie, myslím to vážně ;) )

 
Odpovedať
27.6.2018 21:04
Avatar
Tomáš Pekár:26.3.2020 17:07

V předposledním odstavci je chyba ve slově "podložku". Místo toho má být logicky slovo "podsložka". Jinak děkuji za tyto kurzy, jsou pěkné a poučné. :)

 
Odpovedať
26.3.2020 17:07
Avatar
Martin Přikryl:29.12.2020 15:32

onclick je zde málo vysvětlený. Jen je zmíněno, že vkládáme funkci a neuvádíme závorky. Už tam ale není důvod. A důvodem nejspíš je, že kdybychom uvedli závorky, již nepředáváme funkci, ale její výsledek. Ale jak je to s funkcemi s parametry - ty v onclick nelze použít?

 
Odpovedať
29.12.2020 15:32
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 61.