Autor Zpráva
Kráťa
Profil
Ahoj,
potřeboval bych poradit s javascriptem. mají se tam počítat položky inzerce ve formuláři a i když si myslím, že je to dobře, tak není...
K vidění na http://krata.bubakov.net/www/gelton/formular-sl_listy.html
jde o to, aby se zobrazil základní formát (to asi je těch 300), po výběru se přepsalo pole B a po dalších výběrech to celkem.
mám tam výpočet
inputB.value = a;
inputD.value = b/100 * c;
inputF.value = b * e;
inputG.value = (b + f) - d;

ale počítá se to úplně blbě. :-(
roberta
Profil
preto ti to počíta blbo, lebo polozky formulára sú v textovom formáte a ty chceš, aby to namiesto textov boli čísla. to znamená, že musíš urobiť konzerziu z textového formátu do číselného
nato sa používajú funkcie:
parseInt - text na integer (prirodzené číslo)
parseFloat - text na float (reálne číslo)

čiže napr. namiesto
inputG.value = (b + f) - d;
napíš
inputG.value = (parseFloat(b) + parseFloat(f)) - parseFloat(d);
peta
Profil
Kráťa
"ale počítá se to úplně blbě"
co to znamena?
neni to treba problem typu:
inputG.value = (b + f) - d;
inputG.value = (b*1 + f*1) - d*1;

dal jsem odeslat, pak zpet a chybna stranka

jinak na strance nemuzu prepsat klavesnici zadnou polozku, takze s tim moc delat nemuzu, jako testovat
A jo, to se ani nema. Takze...
A = 1200
inputB.value = a; ... OK
B = 1200

inputD.value = b/100 * c;
u C nemas zadnou polozku selected
C = 5 (2 inzeraty)
D = 1200/100 * 5 = 60 ... OK

inputF.value = b * e;
u E nemas tez nic selected
E = 0.5 (v textu)
F = 1200 * 0.5 = 600 ... OK

inputG.value = (b + f) - d;
G = (1200 + 600) - 60 = 1800-60 = 1740 ... SPATNE
tady ti to pocita neco divne
Zkusil bych polozky znasobit 1, aby jsi neodcital retezce, konkretne bych si tipnul na polozku B, ze je typu string
inputG.value = (b*1 + f) - d;
inputG.value = (b*1 + f*1) - d*1;

roberta tak ses rychlejsi :)
Joker
Profil
Výsledky výpočtů nastavujete jako hodnoty do inputů, ale neaktualizujete si hodnoty v proměnných.
Takže např. na řádku:
inputG.value = (b + f) - d;
pořád pracujete s hodnotami b, d a f, které byly ještě před začátkem výpočtu.

Kdyžtak takhle:
b = a;
d = b/100 * c;
f = b * e;
g = (b + f) - d;

inputB.value = b;
inputC.value = c;
inputD.value = d;
inputF.value = f;
inputG.value = G;
Kráťa
Profil
Joker
jupííííííííííííííííííííííííííííííí už se mi to počítá, dokonce i správně. jen by se mi ale líbilo, kdyby po načtení byl předvyplněný ten input B na základní nejmenší sazbu (to je těch 300) a tím i naskočí nuly v D a F a součet v G (čili zase těch 300).

Celý ten scriptík teď vypadá takto
function change ()
{
var inputA = document.getElementById ("format")
var inputB = document.getElementById ("format_result")
var inputC = document.getElementById ("slevy")
var inputD = document.getElementById ("slevy_result")
var inputE = document.getElementById ("umisteni")
var inputF = document.getElementById ("umisteni_result")
var inputG = document.getElementById ("konecna_bez_dph");

var a = inputA.value - 0;
var b = inputB.value - 0;
var c = inputC.value - 0;
var d = inputD.value - 0;
var e = inputE.value - 0;
var f = inputF.value - 0;
var g = inputG.value - 0;

b = a;
d = b/100 * c;
f = (b - d) * e;
g = (b + f) - d;

inputB.value = b;
inputC.value = c;
inputD.value = d;
inputF.value = f;
inputG.value = g;

}
Kráťa
Profil
Hip hip hip hurá, dal jsem do těla dokumentu k inputům value a chodí to tak, jak jsem chtěl. Děkuji všem za pomoc, považuji to za vyřešené, jdu dělat odesílání.
Joker
Profil
Hip hip hip hurá, dal jsem do těla dokumentu k inputům value a chodí to tak, jak jsem chtěl.
Případně můžete při načítání stránky zavolat přímo metodu change() a jednou ten výpočet provést.
Například dát na konec kódu:
<script type="text/javascript">
change();
</script>
Toto téma je uzamčeno. Odpověď nelze zaslat.

0