Autor Zpráva
tee.vee
Profil
Zdravím, řeším jeden úkol, jen bych ho potřeboval pomoci dotáhnout do konce.

Z databáze si tahám takový objednávkový formulář, ve kterém mám input s cenou za kus a select s vybraným množstvím. Přepočítané množství každé pložky bych si chtěl zobrazit samostatně vedle.

Používám:

<script type="text/javascript" language="JavaScript">
          function change()
          {
            baleni1 = document.getElementById("id[1][baleni]").value;
            kusy1 = document.getElementById("id[1][kus]").value;
            
            result = baleni1 * kusy1;
            document.getElementById("id[1][prepocteno]").value = result;
            }
    </script>
    
    <input type="text" name="baleni" value="500" id="id[1][baleni]" />
    
    <select name="kus" id="id[1][kus]" onclick="change()">
    <?
    for($i=0;$i<=25;$i++){
        echo "<option value=\"".$i."\">".$i." ks</option>\n";
    }
    ?>
    </select>
    
    <input type="text" id="id[1][prepocteno]" size="5" name="prepocteno">

V tomto případě script cenu skutečně přepočítá jak potřebuju - v tom je funkční. Ale když budu těch položek mít třeba 30? nebo pokaždé jiný počet položek? Přeci ten javascript nezkopíruju třeba 50x a jen tam přepíšu jiný vstupní element...to přeci není efektivní řešení. :)

<script type="text/javascript" language="JavaScript">
          function change1()
          {
            baleni1 = document.getElementById("id[1][baleni]").value;
            kusy1 = document.getElementById("id[1][kus]").value;
            
            result = baleni1 * kusy1;
            document.getElementById("id[1][prepocteno]").value = result;
            }
            
            function change2()
          {
            baleni2 = document.getElementById("id[2][baleni]").value;
            kusy2 = document.getElementById("id[2][kus]").value;
            
            result2 = baleni2 * kusy2;
            document.getElementById("id[2][prepocteno]").value = result2;
            }
    </script>
    
    ... ATP

Myslel jsem, že bych tam přidal nějaký for cyklus, který by mi do vstupního elementu měnil čísla, ale to už nefungovalo vůbec, a nebo to bralo pouze a furt jen první řádek k přepočtu...
Joker
Profil
tee.vee:
Přeci ten javascript nezkopíruju třeba 50x a jen tam přepíšu jiný vstupní element...to přeci není efektivní řešení. :)
Správná úvaha, to by byl opravdu nesmysl.

Dejte to, co chcete přepočítat, jako vstupní parametr té funkce.
Třeba:
change(idPrvku) {
  …
   baleni1 = document.getElementById("id["+idPrvku+"][baleni]").value;
  …
}

Omylem jsem to odeslal když to ještě nebylo hotové
peta
Profil
function change(n)
{
baleni1 = document.getElementById("id["+n+"][baleni]").value;
//atd pro ostatni
}
...
<select name="kus" id="id[1][kus]" onclick="change(1)">

"Myslel jsem, že bych tam přidal nějaký for cyklus, který by mi do vstupního elementu měnil čísla, ale to už nefungovalo vůbec, a nebo to bralo pouze a furt jen první řádek k přepočtu... "
Nerozumim. Potrebujes prepocitat jen konkretni polozky pro id[1], id[2] atd ne vsechny naraz, tak, nac cyklus? ten select ovlivnuje jen jeden radek nebo vic? A proc tam mas select a ne input?
tee.vee
Profil
No ono jde o to, že mi vyjede třeba 50 položek (1 položka jako jeden řádek = údaj o balení + údaj o navoleném množství). Tzn: vyjede mi 50 řádků, kde budu mít 50 různých položek a já si vyberu jen ty, které pořebuji. Takže si vyberu položku číslo 2 (a selectem z roletky vyberu třeba 3 kusy) a u tohoto řádku bych chtěl aby mi to ukázalo kolik to je celkem (aby se mi vynásobilo balení * počet ze selectu). Pak si vyberu třeba 30 položku, a nastavím že chci třeba 5 kusů...tak aby se to zase přepočítalo.

Jdu to zkusit, zatím díky za radu pánové


Super, to je přesně to, co potřebuji! :) děkuji

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0