Autor Zpráva
RRR
Profil
ahoj, tento kód mi v některých případech vyhazuje nepochopitelně dlouhá desetinná místa, mně by stačily bohatě jenom dvě a vím o funkci Math.round, ale nevím kam a jak ji napasovat do kódu aby fungovala tak, jak má.
<script>(function() {
    var selectElement1 = document.getElementsByName("8003-1")[0];
    var selectElement2 = document.getElementsByName("8003-2")[0];
    var selectElement3 = document.getElementsByName("8003-7")[0];
    var selectElement4 = document.getElementsByName("8003-3")[0];
    var selectElement5 = document.getElementsByName("8003-4")[0];
    var selectElement6 = document.getElementsByName("8003-5")[0];
    var selectElement7 = document.getElementsByName("8003-6")[0];
    var selectElement8 = document.getElementsByName("8697400038003")[0];
    var resultElement = document.getElementById("result") ;

    function recalculate() {                    
        resultElement.innerText =                
        (selectElement1.value * 289.2 * 4) +            
        (selectElement2.value * 289.2 * 4) +            
    (selectElement3.value * 289.2 * 4) +            
        (selectElement4.value * 289.2 * 4) +            
    (selectElement5.value * 289.2 * 4) +
    (selectElement6.value * 289.2 * 4) +
    (selectElement7.value * 289.2 * 4) + 
        (selectElement8.value * 289.2 * 4) ;            
    }

    selectElement1.addEventListener('change', recalculate);    
    selectElement2.addEventListener('change', recalculate);
    selectElement3.addEventListener('change', recalculate);
    selectElement4.addEventListener('change', recalculate);
    selectElement5.addEventListener('change', recalculate);
    selectElement6.addEventListener('change', recalculate);        
    selectElement7.addEventListener('change', recalculate);        
    selectElement8.addEventListener('change', recalculate);        
    recalculate();
})();
</script>
Tomášeek
Profil
RRR:
Ten kód je hodně brutální, k tomu se vyjadřovat nebudu.

Round patří kolem toho součtu. Logicky přeci ani jinam nejde, ne? Vím, ze jsi začátečník, ale tohle je nějaké základní logické uvažování.

resultElement.innerText = Math.round(...);
Keeehi
Profil
No, takže dnes se naučíme práci s poli.
(function() {
    var selectElementsNames = ["8003-1", "8003-2", "8003-7", "8003-3", "8003-4", "8003-5", "8003-6", "8697400038003"];
    var selectElements = [];
    var resultElement = document.getElementById("result") ;
    
    for(var i = 0; i < selectElementsNames.length; i++) {
        selectElements.push(document.getElementsByName(selectElementsNames[i])[0];
    }
    
    function recalculate() {
        var total = 0;
        
        for(var i = 0; i < selectElements.length; i++) {
            total += selectElements[i].value * 289.2 * 4;
        }
        
        resultElement.innerText = Math.round(total);
    }
    
    for(var i = 0; i < selectElements.length; i++) {
        selectElements[i].addEventListener('change', recalculate);
    }
    
    recalculate();
})();

Vůbec by neškodilo, kdyby sis prošel sekci JavaScript. Je pravda že web JPW vznikl před mnoha lety ovšem základy JS jsou platné stále.
weroro
Profil
Keeehi:
To bol zámer alebo iba prehliadnutie, že nikde nepoužívaš selectElementsNames a nikde nenapĺňaš selectElements?
Keeehi
Profil
weroro:
To se mi asi povedlo omylem smazat, když jsem nakonec formátoval příspěvek. Díky za upozornění, zpětně jsem to tam dodal.
RRR
Profil
díky za odpovědi, nakonec jsem se s tím popral sám
inocencz
Profil
Keeehi, RRR:
ahoj .. jak psal Keeehi. Podivej se na arrays a jejich funkce. Potom se podivej na cykly jako for, while, forEach atd. Hodne ti to pomuze.

kdyz se chces zbavit desetinnych cisel pouzij Math.floor( a sem napis to desetinne cislo ) ... napr.: Math.floor(6.18654) nebo Math.floor( 9 / 3 ) atd.
Pokud ale chces jen zaokrouhlit treba na dve destinna mista pouzij funkci .toFixed()

napr.:

3.333333333.toFixed(2)
bude: 3.33

4.156987.toFixed(3)
4.157

let a = 44.868787
a.toFixed(1)
44.9

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0