Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
discount 30 + hiring

Diskuze: Rada - kde je chyba?

Aktivity
Avatar
Alex
Tvůrce
Avatar
Alex:2.10.2020 17:16

Ahoj,
mám menší problém. Následující JS funguje, ale ne úplně dle mých představ. Měl by mi vypsat atan "déčka". Problém je, že jediné co alert vypíše je "undefined".

Zkusil jsem:

function Returna() {
    let a = document.getElementById(osax.value);
    return a;
}

function Returnb() {
    let b = document.getElementById(osay.value);
    return b;
}

function Returnc() {
    let c = document.getElementById(osaz.value);
    return c;
}

function FunkceB() {
    let a = Returna();
    let b = Returnb();
    let c = Returnc();
    a = parseInt(a);
    b = parseInt(b);
    c = parseInt(c);
    var d = a / b;
    d = parseInt(d);
    var e = Math.atan(d);
    alert(e.value);
}

JavaScript

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
    <script src="js/zbytecnost.js"></script>
    <script src="js/logikaB.js"></script>
    <script src="js/3dscena.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r83/three.js"></script>
    <meta charset="ansi">
    <meta name="generator" content="PSPad editor, www.pspad.com">
    <title>Zde pak možná bude jméno</title>
    <link rel="stylesheet" href="style.css" type="text/css">
</head>

<body>
    <div class="grid-container">
        <header>
            <h1>SEM BUDE PATŘIT JMÉNO</h1>
            <header>
                <form>
                    <div class="grid-element1">
                        <div>
                            <label for=" osax "> souřadnice osy x:</label><input type="text " id="osax" name="osax" placeholder="-100 až 100 " onload="Returna()">
                            <p id="osaxE"></p>
                        </div>
                        <div>
                            <label for="osay "> souřadnice osy y:</label><input type="text " id="osay" name="osay" placeholder="-100 až 100 " onload="Retutnb()">
                            <p id="osayE"></p>
                        </div>
                        <div>
                            <label for="osaz "> souřadnice osy z:</label><input type="text " id="osaz" name="osaz" placeholder="-100 až 100 " onload="Returnc()">
                            <p id="osazE"></p>
                        </div>
                        <div><button id="tlacitko" onmouseover="onmouse(this)" onmouseout="mouseout(this)" onclick="FunkceB(this)">začni</button>
                        </div>
                        <form>
                    </div>
    </div>
    <canvas id="Platno" width="200" height="200">

    </canvas>
</body>

</html>

HTML

Chci docílit: Program by měl vypsat do alertu úhel alfa, který si spočítá za pomocí vstupu uživatele a funkce Math.atan(d).¨

 
Odpovědět
2.10.2020 17:16
Avatar
Mouser
Člen
Avatar
Odpovídá na Alex
Mouser:2.10.2020 22:44

Změň

let a = document.getElementById(osax.value);

na

let a = document.getElementById('osax').value;

Totéž analogicky pro b a c. Do metody getElementById musíš předat jen samotné id, a to jako string, takže buď v uvozovkách nebo v apostrofech. Pak ti metoda vrátí příslušný HTML element, a až na něm zavoláš value.

Pár dalších poznámek:

  • Lepší by byl <input type="number" />, který uživateli nedovolí zadat text, jen číslo.
  • Volání funkcí Returna() atd. na onload eventu inputů je zbytečné. Tyhle funkce mají jen vracet hodnotu z inputů, která se v tu chvíli stejně nemá kam uložit. Navíc bezprostředně po loadu jsou inputy stejně prázdné.
  • Nevím, proč používáš starý doctype pro HTML4, změň ho na novější <!DOCTYPE html>. Navíc si nejsem jistý, jestli ti bez toho bude fungovat canvas, ten přišel až v HTML5.
  • Funkce parseInt() vrací celé číslo. Řekl bych, že spíš chceš pracovat s desetinnými čísly, takže ji nahraď funkcí parseFloat().

Tady máš zjednodušenou ukázku: JSfiddle

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
2.10.2020 22:44
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Alex
Tvůrce
Avatar
Odpovídá na Mouser
Alex:2.10.2020 23:20

Díky za rady.
Javascript se učím tak nějak za pochodu, takže hodně věcí prostě ještě neznám.
Int tam mám záměrně, protože s desetinými čísly nepočítám, nejsou potřeba, možná časem budou, ale přepsat v té funkci datový typ, je otázka pár vteřin ;-)
Doctype mi tam předvygeneroval PSpad, zatím jsem to nějak neřešil, zase nebyl důvod, ale radši se na to podívám. Díky za upozornění.
Díky za tvou pomoc

 
Nahoru Odpovědět
2.10.2020 23:20
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.