Chyba v součtu

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod spenik 25. 5. 2014 20:18

Zdravím

Mám problém s počítáním v tomto jednoduchém kódu. Jak to udělat tak, aby se to vždy sčítalo na řádce a ne na řádce pod a když už jsme u toho, jak bych měl udělat, aby se mi každý výsledek z řádku zobrazil dole jako celková cena? Děkuji moc, už se na to pokouším přijít delší dobu. A taky promiňte za nějakou chybu, ale teprve se to učím.

Kód: Vybrat vše
<script src="//cdnjs.cloudflare.com/ajax/libs/three.js/r50/three.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/processing.js/1.4.1/processing-api.min.js"></script>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<style type="text/css">
                        table.tableizer-table {
                        border: 1px solid #CCC; font-family: Tahoma, Geneva, sans-serif
                        font-size: 8px;
                    }
                    .tableizer-table td {
                        padding: 4px;
                        margin: 3px;
                        border: 1px solid #ccc;
                    }
                    .tableizer-table th {
                        background-color: #FFFFFF;
                        color: #000;
                        font-weight: bold;
                    }
                    </style><table class="tableizer-table">
                    <tr class="tableizer-firstrow">
<td width=40 align=center><FONT face=Calibri size=2 color=#000000><B>díl</B></FONT></td>
<td width=40 align=center><FONT face=Calibri size=2 color=#000000><B>šířka v cm</B></FONT></td>
<td width=40 align=center><FONT face=Calibri size=2 color=#000000><B>výška v cm</B></FONT></td>
<td width=178 align=center><FONT face=Calibri size=2 color=#000000><B>provedení</B></FONT></td>
<td width=96 align=center><FONT face=Calibri size=2 color=#000000><B>shrnování</B></FONT></td>
<td width=134 align=center><FONT face=Calibri size=2 color=#000000><B>spodní profil</B></FONT></td>
<td width=62 align=center><FONT face=Calibri size=2 color=#000000><B>zip</B></FONT></td>
<td width=62 align=center><FONT face=Calibri size=2 color=#000000><B>montáž</B></FONT></td>
<td width=100align=center><FONT face=Calibri size=2 color=#000000><B>cena s DPH</B></FONT></td>
                     <tr><td width=40 align=center><FONT face=Calibri size=2 color=#000000><B>I.</B></FONT></td>
                     <td><input type="text" name="sirka" id="selectService6" maxlength="4" style="float: center; width: 40px; margin-right: 6px; vertical-align: top; padding-top: 2px; padding-bottom: 2px;" class="text active"></td>
                     <td><input type="text" name="vyska" id="selectService7" maxlength="4" style="float: center; width: 40px; margin-right: 6px; vertical-align: top; padding-top: 2px; padding-bottom: 2px;" class="text active"></td>
                     <td><select name="selectService1" id="selectService1" onchange="change('0',this.value)">
                                <option value="0" selected="selected">žádné</option>
                                <option value="700">celoprůhledné</option>
                                <option value="750">průhledné s lemem</option>
                                <option value="550">průhledné s neprůhledným</option>
                                <option value="450">neprůhledné</option>
                            </select>
                            <span id="span1"></span></td><td><select name="selectService2" id="selectService2" onchange="change('0',this.value)">
                                <option value="0" selected="selected">žádné</option>
                                <option value="200">nahoru</option>
                                <option value="325">do boku</option>
                               
                            </select>
                            <span id="span2"></span></td><td><select name="selectService3" id="selectService3" onchange="change('0',this.value)">
                                <option value="210">hliníkový profil</option>
                                <option value="20">dřevěná lišty</option>
                                <option value="0" selected="selected">žádný</option>
                            </select>
                            <span id="span3"></span></td><td><select name="selectService4" id="selectService4" onchange="change('0',this.value)">
                                <option value="200">ano</option>
                                <option value="0" selected="selected">ne</option>
                            </select>
                            <span id="span4"></span></td><td><select name="selectService5" id="selectService5" onchange="change('0',this.value)">
                                <option value="1">ne</option>
                                <option value="1.2">ano</option>
                            </select>
                            <span id="span5"></span></td><td><span id="spanComplete"></span> ,-
                            <br>
                            </form>
                        <script type="text/javascript">
                     
                            function change(id,val)
                            {
                                if(val == 0){
                                    val = "žádné";
                                }
                     
                                $('#span'+id).text(val);
                     
                                count();
                            }
                     
                            function count()
                            {
                                var value1 = parseFloat($("#selectService1").val(), 10);
                                var value2 = parseFloat($("#selectService2").val(), 10);
                                var value3 = parseFloat($("#selectService3").val(), 10);
                                var value4 = parseFloat($("#selectService4").val(), 10);
                                var value5 = parseFloat($("#selectService5").val(), 10);
                                var value6 = parseInt($("#selectService6").val(), 10);
                                var value7 = parseInt($("#selectService7").val(), 10);
                     
                                var completeValue = (((((value6*value7)/10000)*(value1))+((value2)*(value6/100))+((value3)*(value6/100))+((value4)*(value7/100)))*(value5))*1.21;
                     
                                $('#spanComplete').text(completeValue);
                            }
                     
                        </script>
                    </body></td></tr>
                            <br>
                            </form>
<tr><td width=40 align=center><FONT face=Calibri size=2 color=#000000><B>II.</B></FONT></td>
                     <td><input type="text" name="sirka" id="selectService16" maxlength="4" style="float: center; width: 40px; margin-right: 6px; vertical-align: top; padding-top: 2px; padding-bottom: 2px;" class="text active"></td>
                     <td><input type="text" name="vyska" id="selectService17" maxlength="4" style="float: center; width: 40px; margin-right: 6px; vertical-align: top; padding-top: 2px; padding-bottom: 2px;" class="text active"></td>
                     <td><select name="selectService11" id="selectService11" onchange="change('0',this.value)">
                                <option value="0" selected="selected">žádné</option>
                                <option value="700">celoprůhledné</option>
                                <option value="750">průhledné s lemem</option>
                                <option value="550">průhledné s neprůhledným</option>
                                <option value="450">neprůhledné</option>
                            </select>
                            <span id="spani11"></span></td><td><select name="selectService12" id="selectService12" onchange="change('0',this.value)">
                                <option value="0" selected="selected">žádné</option>
                                <option value="200">nahoru</option>
                                <option value="325">do boku</option>
                               
                            </select>
                            <span id="spani12"></span></td><td><select name="selectService13" id="selectService13" onchange="change('0',this.value)">
                                <option value="210">hliníkový profil</option>
                                <option value="20">dřevěná lišty</option>
                                <option value="0" selected="selected">žádný</option>
                            </select>
                            <span id="spani13"></span></td><td><select name="selectService14" id="selectService14" onchange="change('0',this.value)">
                                <option value="200">ano</option>
                                <option value="0" selected="selected">ne</option>
                            </select>
                            <span id="spani14"></span></td><td><select name="selectService15" id="selectService15" onchange="change('0',this.value)">
                                <option value="1">ne</option>
                                <option value="1.2">ano</option>
                            </select>
                            <span id="spani15"></span></td><td><span id="spanComplete1"></span> ,-
                            <br>
                            </form>
                        <script type="text/javascript">
                     
                            function change(id,val)
                            {
                                if(val == 0){
                                    val = "žádné";
                                }
                     
                                $('#span'+id).text(val);
                     
                                count();
                            }
                     
                            function count()
                            {
                                var value11 = parseFloat($("#selectService11").val(), 10);
                                var value12 = parseFloat($("#selectService12").val(), 10);
                                var value13 = parseFloat($("#selectService13").val(), 10);
                                var value14 = parseFloat($("#selectService14").val(), 10);
                                var value15 = parseFloat($("#selectService15").val(), 10);
                                var value16 = parseInt($("#selectService16").val(), 10);
                                var value17 = parseInt($("#selectService17").val(), 10);
                     
                                var completeValue1 = (((((value16*value17)/10000)*(value11))+((value12)*(value16/100))+((value13)*(value16/100))+((value14)*(value17/100)))*(value15))*1.21;
                     
                                $('#spanComplete1').text(completeValue1);
                            }
                     
                        </script>
                    </body></td></tr>
                            <br>
                            </form>                       
                    </table>                     
                    </body>
spenik
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod Just_jo 25. 5. 2014 21:43

No vůbec nejde rozumět otázce.
1. Co se učíš ( HTML nebo jQuery? ) - chyby jsou v obojím
2. Výsledek se zobrazí tam, kde je umístěn element s ID spanComplete a spanComplete1
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod spenik 25. 5. 2014 21:56

Učím se JQuery
Ale výsledek s řádku I. se zobrazuje ve výsledku řádku II. Tak netuším, kde je chyba :--
spenik
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod Just_jo 25. 5. 2014 22:20

No nejspíš proto, že mají obě fce stejný název.
Bylo by vhodnější použít eventy a pracovat přímo s elementy než proměnými.
Rozhodně mít pouze jednu fci "count" a jednu fci "change" - jinak se volá pouze ta první
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod spenik 26. 5. 2014 06:42

Tak teď jaksi nevím, jak se s tím vypořádat, aby to fungovalo. Jako dovedu si představit, že výsledná cena se bude ze všech řádků ukazovat dole jako celková, ale vůbec netuším, jak na to, když mám použít jen jednou od každé funkce :-(
spenik
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod Just_jo 26. 5. 2014 09:40

Nejspíš bude nejjednodušší udělat toto.
Pro každý řádek mít fce "count1", "count2", "count3" ... "countx" ( číslo je číslo řádku )
To samé pro "change".

Tip:
Místo vytvoření tabulky tagy <table> to vytvořit pomocí <div>
Pro jQuery využít eventy a selektory přes class ( ne ID ) - tím by se dala použít jediná fce pro x řádků
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod spenik 26. 5. 2014 10:00

Takže to znamená, že každá řádka bude začínat count1 atd:
Takže nějak takto?
count1 <script src="//cdnjs.cloudflare.com/ajax/libs/three.js/r50/three.min.js"></script>
count 2 <script src="//cdnjs.cloudflare.com/ajax/libs/processing.js/1.4.1/processing-api.min.js"></script>
count3 <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
count4 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
count 5<style type="text/css">
table.tableizer-table

-- 26. 5. 2014 09:01 --

No tak to teď netuším vůbec :-(
spenik
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod Just_jo 26. 5. 2014 10:10

V tvém prvním příspěvku máš 2x definovanou fci "count" a "change".
Takže pro první řádek tabulky změn všechna volání "count" a "change" na "count1" a "change1" a uprav názvy fcí.
Pro druhý řádek tabulky změn stejně jako první řádek ale názvy budou "count2" a "change2"

-- 26. 5. 2014 10:12 --

Úryvek:

Kód: Vybrat vše
<select name="selectService1" id="selectService1" onchange="change1('0',this.value)">


Kód: Vybrat vše
<script type="text/javascript">
                     
                            function change1(id,val)
                            {
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod spenik 26. 5. 2014 10:17

Tak teď už to chápu, ale co když budu chtít řádků mnohem víc? Počítám tak s deseti? Jaké názvy bych měl použít?
spenik
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod Just_jo 26. 5. 2014 10:21

To chce začít používat jQuery s eventy a celé fce upravit tak, aby si po zavolání eventu načetly samy správný řádek ( API je celkem přehledné ).
Mrkni se na events a children a parentsUntil
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod gandor 26. 5. 2014 10:40

v ZIADNOM pripade by som nepisal viac ako 1 funkciu. Treba tu funkciu zjednodusit tak, aby stacila jedina funkcia. Pokial sa nenajde rozumenjsie riesenie (naslo by sa, idealne pouzit kontext riadku tabulky a dotahovat ostatne dom elementy cez jQuery funkciu find), tak aspon hodit to poradove cislo ako parameter funkcie (cislo riadku) a tak to spracovavat...
Pisanie vlastnej funkcie na novy riadok ma niekolko chyb:
1, zbytocna pracnost - musis ten kod napisat/nakopirovat X krat a na kazdom mieste upravit
2, nachylnost na chyby - lahko sa prekliknes ked to budes kopcit s miniupravou 7-my krat a viac. O to viac, ked uz to bude skopcene a budes chciet zmenit sposob vypoctu (t.j. spravit upravu v kazdej jednej funkcii).
3, chybu ani nezbadas - lebo vsak vsade inde to funguje (na riadkoch 1, 2, a 5, ale ze bola chyba zrovna na 4. ti uz nenapadne skusit)
4, predlzuje to dobu nacitania - mas opakujuci kod, stranka zabera viac miesta na disku a teda sa aj dlhsie stahuje. Takze dlhsie trva docitanie stranky
5, ide o pomalsie riesenie - aj jadro prehliadaca ma urcitu (aj ked nizku) dobu spracovania zdrojakov. A spracovat 100 funkcii je vzdy narocnejsie ako spracovat 1 hoc aj malinko komplikovanejsiu funkciu. Aj ked priznavam, ze tento efekt je asi najzanedbatelnejsi...
gandor
Mírně pokročilý

Odeslat příspěvekod Just_jo 26. 5. 2014 10:44

Jen podotknu - jQuery se učím cca 2 - 3 měsíce
Toto je ( prozatím nedodělaný ) výsledek
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod spenik 26. 5. 2014 11:19

Just_jo: tvoje metoda se osvědčila ;-) A jak ještě udělám, aby se na konci sečetli všechny spanComplete1?
Stačí udělat funkci na spanComplete1+spanComplete2....?

A ještě aby se spanComplete vždy zaokrouhloval na dvě desetinná místa?
spenik
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod Just_jo 26. 5. 2014 11:35

Zde je to hezky popsané

-- 26. 5. 2014 11:38 --

Nebo zde

-- 26. 5. 2014 11:40 --

Pro celkový součet přiřaď výsledkům nějaký class a využij z jQuery $.each
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod PiranhaGreg 26. 5. 2014 12:10

Co takhle? click
Asi jsem se někde sekl v tom tvým vzorečku, tak si to když tak zkontroluj O:-) .
PiranhaGreg
Mírně pokročilý
Uživatelský avatar

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků