Autor Zpráva
RRR
Profil
zdravím, mám jednoduchý kód, který má dělat, že když si v select tlačítku vyberu například 5 kartonů, tak se počet zvolených kartonů vynásobí s jeho cenou (v tomto případě 10) a vypíše to jako Cena: ...
<html>
<head>
</head> 
<body>
<script type="text/javascript">
    var b = a*10;
    var c = document.getElementsByName("8699120032262");
    var a = c.options[c.selectedIndex].value;
</script>
<select name="8699120032262" size="1" > 
<option value="0">0</option>
<option value="1">1 karton</option>
<option value="2">2 kartony</option>
<option value="3">3 kartony</option>
<option value="4">4 kartony</option>
<option value="5">5 kartonů</option>
<option value="6">6 kartonů</option>
<option value="7">7 kartonů</option>
<option value="8">8 kartonů</option>
<option value="9">9 kartonů</option>
<option value="10">10 kartonů</option>
</select>
    <h1>
      cena:
      <script type="text/javascript">
        document.write(b)
      </script>
    </h1>
</body>
</html>
jsem amatér, budu vděčný za jakoukoliv pomoc
Keeehi
Profil
RRR:
document.write se dá použít jen při načítání dokumentu. Jakmile je stránka už načtená, document.write se už použít nedá, protože by ji celou přepsal.

    var b = a*10;
    var c = document.getElementsByName("8699120032262");
    var a = c.options[c.selectedIndex].value;

Proměnná b musí být až na konci. Takhle by se snažila počítat s proměnnou a která v té době ještě neexistuje.

c.options[c.selectedIndex].value se dá napsat jednodušeji jako c.value

document.getElementsByName("8699120032262") vrátí možinu (pole) elementů, které mají takové jméno. Pokud budeme předpokládat, že formulářový prvek takového jména je na stránce jeden, tak tě bude zajímat první prvek pole. Takže za tímto výrazem by mělo být ještě [0] - což říká, vyber první prvek v poli. (prvky v poli se číslují od nuly)

No a na závěr, musí se javascriptu říct, že to má někdy přepočítat. Vykonání nějaké akce na základě toho že se něco stalo zajišťují události. V tomto případě bych zvolil onchange která se spustí právě v případě změny hodnoty selectu.

Celé upravené by to mohlo vypadat takto. Živá ukázka

Ta konstrukce
(function () {
    
    // ....
    
})();
není povinná. Zajistí to ale to, že ten kód uvnitř nezasahuje ta jiného javascriptu, který by na stránce mohl být. Pokud by na stránce byla jiná funkce recalculate, ta moje by ji přepsala (případně ta moje by byla přepsána). Takhle se nebudou vzájemně ovlivňovat. To samé platí i pro proměnné.
RRR
Profil
Keeehi:
to je parádní! děkuji moc


Keeehi:
Dá se to nějak použít pro větší množství tlačítek a sčítat to vše do jednoho vysledku?
Keeehi
Profil
RRR:
Jasně že dá. Nejlépe bude všem takovým elementům přidat nějakou třídu a pro jejich výběr použít getElementsByClassName. Výběr prvního prvku pole tam teď nebude, jelikož tě teď budou zajímat všechny. To pole příjdeš cyklem a událost onchange pridáš každému z nich. Podobně se upraví i funkce recalculate kde se projde cyklem zase to pole s formulářovými elementy, do nějaké proměnné se to načítá a její obsah se nakonec vloží do toho připraveného spanu.
RRR
Profil
Keeehi:
děkuji moc, už to šlape jako hodinky

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0