Autor Zpráva
inetMark
Profil
Ak mam nejaky select a v nom option a chcem do nejakeho labela vypisovat sumu podla toho, aky option bol vybraty ako je to mozne?
Ide mi o to, ze v jednom selecte sa vybere nazov polozky (ten urci cenu) a v inom selecte sa urci pocet kusov. Teda do lebela sa ma vypise prve krat druhe.
Ako na to?
Trejpa
Profil
inetMark
Co třeba takto:

<script type="text/javascript">
<!--
function Pocitadlo()
{
var a = document.formular.jmeno.value;
var b = document.formular.pocet.value;
document.formular.vysledek.value = a * b;
}
//-->
</script>
<form action="#" name="formular" onsubmit="return false;">
<fieldset>
<label for="jmeno">Zboží</label>
<select name="jmeno" id="jmeno" onchange="Pocitadlo();">
<option value="60">Kuře (za 60)</option>
<option value="70">Hovězí (za 70)</option>
<option value="85">Ryba (za 85)</option>
</select><br>
<label for="pocet">Množství</label>
<select name="pocet" id="pocet" onchange="Pocitadlo();">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select><br>
<label for="vysledek">Celková cena</label>
<input type="text" name="vysledek" id="vysledek">
</fieldset>
</form>


Teda do lebela sa ma vypise prve krat druhe.
Do <label> asi ne. Do <input> by to šlo.
inetMark
Profil
Dakujem pekne. S javascriptom vsak neviem vobec robit. Text medzi <!-- //--> mam dat do head, body ci medzi ne? alebo staci priamo nad formular? Dalej da sa nastavit ten input type text na readonly?
Dakujem.

EDIT: Nahodil som to do suboru. Ako mam teraz tu funkciu volat? Urobil som ako si pisal, ale pri zmene polozky v option a ani pri zmene hodnoty v pocte kusov sa mi suma nezobrazi.


//toto je v BODY HTML
<script type="text/javascript">
<!--
function Pocitadlo()
{
var a = document.formular.poclicencii.value;
var b = document.formular.program.value;
document.formular.vysledok.value = a * b;
}
//-->
</script>
//... nasleduje deklarovanie formulara atd... a potom toto
<input name='poclicencii' size='2' maxlength='40' type='text' value='1' onchange='Pocitadlo();'>
<select name='program' size='1' onchange='Pocitadlo();'>
<option value='100'>p1
<option value='200'>p2
<option value='300'>p3
<option value='400'>p5
</select>

<label for='vysledok'>Celková cena</label>
<input type='text' name='vysledok' id='vysledok'>
inetMark
Profil
Az teraz som zbadal: onchange="Pocitadlo();
Doplnil som to tam, vsak stale mi to nejde :(
Trejpa
Profil
inetMark
da sa nastavit ten input type text na readonly?
Ano, dá. (A proč to rovnou nevyzkoušíš?)

Text medzi <!-- //--> mam dat do head, body ci medzi ne?
Je jedno, kam skript umístíš, obvykle se dává do hlavičky (ale včetně značek <script> a </script>), ale pokud ho dáš před formulář, tak také nic nezkazíš.

U přímo volaných funkcí (není tento případ) je nutno zajistit, aby byly funkce načteny před načtením elementu, který je volá (třeba je volá rovnou <body>). Proto se dávají před <body>, tedy do hlavičky. Skripty, které něco do stránky zapisují (document.write), musí být pochopitelně přímo v <body>.
inetMark
Profil
Dakujem.
A teda este v com mam problem ze mi to nejde?
Trejpa
Profil
inetMark
Mě to funguje. Nezapomeň, že to musí být ve formuláři (<form>), ten se musí jmenovat (name) a přes toto jméno se na položky odkazuješ (document.formular.poclicencii.value). Onchange se u inputu projeví až kliknutím mimo políčko. A také by sis měl ošetřit případ, že tam někdo vloží něco jiného, než číslo (ale svět ani prohlížeč se nezbortí, násobení místo výsledku vrátí NaN).


<script type="text/javascript">
<!--
function Pocitadlo2()
{
var c = document.formular2.poclicencii.value;
var d = document.formular2.program.value;
document.formular2.vysledok.value = c * d;
}
//-->
</script>
<form action="#" name="formular2" onsubmit="return false;">
<input name='poclicencii' size='2' maxlength='40' value='1' onchange='Pocitadlo2();'>
<select name='program' onchange='Pocitadlo2();'>
<option value='100'>p1
<option value='200'>p2
<option value='300'>p3
<option value='400'>p5
</select>
<label for='vysledok'>Celková cena</label>
<input type='text' name='vysledok' id='vysledok'>
</form>
inetMark
Profil
Ospravedlnujem sa, sice som to sem nedal, ale ak islo o to ,ze script nebol zakonecny, tak bol, len som to nedal sem. Prispevok som uz editol. Dokonca som pridal volanie funkie aj na onFocus a tiez sa nic nedeje.
nazov formularov je rovnaky.

Ak skopirujem kompletne tvoj text do noveho suboru tak mi to ide :) . Len neviem spojazdnit to moje. No nic, idem hladat chybu :)

Edit: Rozmyslam, ci nemoze byt problem to, ze cely formular (od zaciatku az po konec, je vlozeny pomocou PHP do premennej a to takto
$mojformular =
"
<form name='formular' id='formular' action='objednavka.php' method='post'>
...atd (vratane tych inputov vyssie uvedenych
";

Ak je toto problem, tak neviem co mam robit. Pretoze tu premennu pouzivam na troch miestach. Ak ju zrusim, tak na 3 miestach budem musiet umiestnit vykreslenie jedneho formulara. Totiz ide o to ze samotny PHP subor je pouzivany na odoslanie mailu (objednavky) a aj na vykreslenie formulara. Ten formular sa vsak vykresluje len vtedy, ak je jeden hiden input value=="ok". Ak totiz nie je ok vykresli sa formular. Ak je OK tak sa vypise na 2 sekundy text a az potom sa vykresli formular (vdaka tej premennej prave).
Trejpa
Profil
inetMark
Vždyť jsem ti to už napsal, prvky formuláře musí být ve formuláři, v tomto případě se musí jmenovat "formular". Ten ti tam stále chybí.

<form name="formular">
...
</form>
inetMark
Profil
Formular tam mam. Nepisal som cely kod, moja chyba. Teraz som editor predosli prispevok, co ma jedine napada ze preco to nefunguje. Napisem to aj sem

Edit: Rozmyslam, ci nemoze byt problem to, ze cely formular (od zaciatku az po konec, je vlozeny pomocou PHP do premennej a to takto
$mojformular =
"
<form name='formular' id='formular' action='objednavka.php' method='post'>
...atd (vratane tych inputov vyssie uvedenych
";

Ak je toto problem, tak neviem co mam robit. Pretoze tu premennu pouzivam na troch miestach. Ak ju zrusim, tak na 3 miestach budem musiet umiestnit vykreslenie jedneho formulara. Totiz ide o to ze samotny PHP subor je pouzivany na odoslanie mailu (objednavky) a aj na vykreslenie formulara. Ten formular sa vsak vykresluje len vtedy, ak je jeden hiden input value=="ok". Ak totiz nie je ok vykresli sa formular. Ak je OK tak sa vypise na 2 sekundy text a az potom sa vykresli formular (vdaka tej premennej prave).
inetMark
Profil
Dal som to mimo premennej PHP a ide to. Chcem tam mat este jeden checkbox aby sa pri jeho zaskrtnuti priratalo 50,-Sk. Neviem ako na to. V JavaScripte mam toto:
<script type='text/javascript'>
<!--
function Pocitadlo()
{
var a = document.formular.poclicencii.value;
var b = document.formular.program.value;
var c = document.formular.cd.checked; //to CD je ten input checkbox takto deklarovany je nizsie
var d = a * b;
if (c == "checked") {d = d + 50};
document.formular.vysledok.value = d;
}



<input type='checkbox' name='cd' checked='checked' value='1' onchange='Pocitadlo();'>
Trejpa
Profil
inetMark
Pozor: c = document.formular.cd.checked; nevrací "checked", ale true nebo false. Tak si buď oprav podmínku na if (c) {d += 50};, nebo použij toto:


function Pocitadlo()
{
var a = document.formular.poclicencii.value;
var b = document.formular.program.value;
var c = document.formular.cd.checked;
document.formular.vysledok.value = a * b + c * 50 * a;
}
// To poslední *a násobí tu 50ku počtem kusů (za předpokladu co kus, to CD).
// Pokud je to CD jen jedno k celé dodávce, tak poslední *a umaž.
inetMark
Profil
Dakujem. Ze vracia TRUE a FALSE som nevedel. Ostatne uz nie je problem. Syntax je podobna C#, takze som si to cele upravil uz (aj na mnozstevne zlavy).
S tym checked ma mylilo to, ze som niekde cital ze v xhtml ma input checkbox atribut checked a ten sa v xhtml pise ako checked="checked" ak chcem aby bol zaciarknuty.
Trejpa
Profil
inetMark
v xhtml ma input checkbox atribut checked
Ano. V (X)HTML je jedinou možnou hodnotou atributu checked právě checked.
V JavaScriptu se k zatržení políčka přistupuje jinak, hodnotami true a false.
Zápis <input type='checkbox' checked='true'> by byl tedy špatně (ale funguje).

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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