Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

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
Jakub Švasta
Lektor
Avatar
Odpovídá na Alex
Jakub Švasta: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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
2.10.2020 22:44
Avatar
Alex
Tvůrce
Avatar
Odpovídá na Jakub Švasta
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.