Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Počítací javascript nejavascriptí

Jsem si myslel, že když ten losův počítací javascript předělám na:

<script type="text/javascript" language="JavaScript">
<!--
  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 inputD = document.getElementById ("umisteni_result")
var inputG = document.getElementById ("konecna_bez_dph")
var inputH = document.getElementById ("konecna_s_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 = inputC.value - 0;
var g = inputD.value - 0;
var h = inputE.value - 0;

inputA.value = "" ;
inputB.value = 0 + (isNaN (format)? "": format_result);
inputC.value = "" ;
inputD.value = c + (isNaN (slevy)? "": slevy_result);
inputE.value = "" ;
inputF.value = b - d + (isNaN (umisteni)? "": umisteni_result);
inputG.value = b * c + f ;
inputH.value = b * c + f * 119;
}
//-->
</script>

že se mi to bude počítat ale nepočítá bůůů. Ta pole format slevy, umístění, mám roletky a v polích s result se mi po vybrání neobjeví nic. Asi bude chybka hned v tom prvnim.
Prosím prosím co mám blbě?

Předmět Autor Datum
A k jakému prvku a na jakou událost máš pověšenou funkci change()?
host 11.02.2007 11:26
host
Já tam pak mám vždy "roletku", kde si vybere a pod tím je okénko, kde by se to mělo objevit. Je tam…
Kráťa 11.02.2007 13:24
Kráťa
U toho selectu místo onkeyup="change()" dej onchange="change();". ;-)
Marvin 11.02.2007 13:37
Marvin
Ještě tam budu mít chybku. Při pokusu o vybrání z roletky píše, že "formát není definováno". To bude…
Kráťa 11.02.2007 13:47
Kráťa
Nahraď inputB.value = 0 + (isNaN (format)? "": format_result); tímto: inputB.value = 0 + (isNaN (…
Marvin 11.02.2007 13:54
Marvin
super, už to vypadá slibně, jen jsem nemehlo a furt se mu něco nelíbí. Teď pro změnu, že input F nen…
Kráťa 11.02.2007 14:14
Kráťa
Myslím že už sem pochopil co chceš aby to dělalo. Zkus to ještě takto: inputB.value = 0 + (isNaN (i…
Marvin 11.02.2007 14:23
Marvin
Ted se mu pro změnu nelíbí jiný řádek. Prý var f = inputF.value - 0; Prototyp jsem hodil na web http…
Kráťa 11.02.2007 14:36
Kráťa
Ve FF to žádnou chybu nehlásí..... ale ani nic nepočítá. ::)
host 11.02.2007 15:05
host
:-D FF je mlčenlivý. PSPad říká toto [http://img233.imageshack.us/img233/6316/pspadae8.gi f]
Kráťa 11.02.2007 15:20
Kráťa
Takže: script: function change () { var inputA = document.getElementById ("format") var inputB = d…
Marvin 11.02.2007 15:14
Marvin
jupíííííííííííííí to je super. Ono mi to hlásilo něco s tím H. Ale zrovna psal ten kámoš z novin, že…
Kráťa 11.02.2007 15:40
Kráťa
Se mi to počítá, ale nějak úplně divně. když zvolím v první roletce ten základ, neobjeví se nic. Až…
Kráťa 11.02.2007 23:11
Kráťa
Dneska večer bych se na to moh zkusit ještě podívat, pokud jsi to teda už nevyřešil.
Marvin 12.02.2007 09:35
Marvin
Já tu něco pořešil, ale furt mi tam někde dělá paseku ta částka za umístění. Když je 0, přičte se tě…
Kráťa 12.02.2007 11:12
Kráťa
Tak jsem došel k tomu, že když nevyplní nic, jsou tam předepsané hodnoty. Když v první roletce vyber…
Kráťa 13.02.2007 11:09
Kráťa
Neviem, či si to už vyriešil, ale podľa toho, čo som čítal na jakpsatweb, tak asi nie. Tam Ti radil…
los 13.02.2007 11:11
los
Já to snad nedokážu. 1 000 000 pokusů, všechno blbě. Skončil jsem u inputB.value = 0 + (isNaN (form…
Kráťa 13.02.2007 15:57
Kráťa
Hurá už jsem to s tím od jokera částečně rozchodil. Jen když se ta stránka načte, mělo by se objevit…
Kráťa 13.02.2007 16:33
Kráťa
Hip hip hip hurá, dal jsem do těla dokumentu k inputům value a chodí to tak, jak jsem chtěl. Děkuji…
Kráťa 13.02.2007 16:46
Kráťa
ještě matematický oříšek. On je ten výpořet špatně zadaný, jelikož to nepočítá slevu třeba na 3, ale… poslední
Kráťa 13.02.2007 23:51
Kráťa

Já tam pak mám vždy "roletku", kde si vybere a pod tím je okénko, kde by se to mělo objevit. Je tam např.

<select id="format" onkeyup="change()" name="druh" size="1">
<option value="300">1/32 (4,4 x 3,1 cm)</option>
<option value="600">1/16 (4.4 x 6,5 cm)</option>
<option value="1200">1/8 (9,2 x 6,5 cm)</option>
<option value="2400">1/4 (9,2 x 13,2 cm)</option>		
<option value="4800">1/2 (18,7 x 13,2 cm)</option>
<option value="4800">1/1 (18,7 x 26,8 cm)</option>
</select>

a to okénko pod tím

<input id="format_result" type="text" onkeyup="change()" readonly="readonly">

až budu velký, chtěl bych být programátorem. :-)

Nahraď

inputB.value = 0 + (isNaN (format)? "": format_result);

tímto:

inputB.value = 0 + (isNaN (inputA.value)? "": inputB.value);

podobně to aplikuj i dále ve scriptu s slevy, slevy_result, umisteni a umisteni_result.

edit: Podotýkám že nekontroluji správnost algoritmu, pouze odstraňuji chyby s nedefinovanými proměnnými. :-)

super, už to vypadá slibně, jen jsem nemehlo a furt se mu něco nelíbí. Teď pro změnu, že input F není definováno, mám to takto:

inputA.value = "" ;
inputB.value = 0 + (isNaN (inputA.value)? "": inputB.value);
inputC.value = "" ;
inputD.value = c + (isNaN (inputC.value)? "": inputD.value);
inputE.value = "" ;
inputF.value = b - d + (isNaN (inputE.value)? "": inputF.value);
inputG.value = b * c + f ;
inputH.value = b * c + f * 119; 

už se mi u toho prvního objevuje nula. :-)

Myslím že už sem pochopil co chceš aby to dělalo. Zkus to ještě takto:

inputB.value = 0 + (isNaN (inputA.value)? "": inputA.value);
inputD.value = c + (isNaN (inputC.value)? "": inputC.value);
inputF.value = b - d + (isNaN (inputE.value)? "": inputE.value);
inputG.value = b * c + f ;
inputH.value = b * c + f * 119; 

Myslím že by ti to už mělo fungovat. :-)

Takže:

script:

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 inputH = document.getElementById ("konecna_s_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;
  var h = inputH.value - 0;

  inputB.value = 0 + a;
  inputD.value = b * (1 - c);
  inputF.value = (b - d) * e;
  inputG.value = b - d + f ;
  inputH.value = g * 1.19;
}

potom první select:

<select id="format" onchange="change()" name="format" size="1">
  <option value="300">1/32 (4,4 x 3,1 cm)</option>
  <option value="600">1/16 (4.4 x 6,5 cm)</option>
  <option value="1200">1/8 (9,2 x 6,5 cm)</option>
  <option value="2400">1/4 (9,2 x 13,2 cm)</option>		
  <option value="4800">1/2 (18,7 x 13,2 cm)</option>
  <option value="4800">1/1 (18,7 x 26,8 cm)</option>
</select>

druhý select:

<select id="slevy" name="druh" size="1" onchange="change()">
  <option value="0.95">2 inzeráty</option>
  <option value="0.90">3 inzeráty</option>
  <option value="0.85">6 inzerátů</option>
  <option value="0.70">12 inzerátů</option>
</select>

třetí select:

<select id="umisteni" name="druh" size="1" onchange="change()">
  <option value="0">na inzertní ploše	příplatek 0 %</option>
  <option value="0.5">v textu příplatek 50 %</option>
</select>

chce si to ještě malinko věcí vychytat (jako například zobrazovat nulu pokud ještě nebylo nic vybráno, atd.), ale už to aspoň počítá. ;-)

jupíííííííííííííí to je super. Ono mi to hlásilo něco s tím H. Ale zrovna psal ten kámoš z novin, že s DPH to nechce. Vyhodil jsem H a jede to.
Ono zobrazování nul by se mi též líbilo a ještě víc by se mi líbilo nějaké zaokrouhlování na celé, aby tam nebylo např. 180.00000000000003. :-)

Tak jsem došel k tomu, že když nevyplní nic, jsou tam předepsané hodnoty. Když v první roletce vybere inzerát za 600, tak se to ale v tom celkem nepřehodí na 600. Nepřehodí se tam nic, dokud něco neudělá se všemi třemi roletkami (formát, počet, umístění), přitom když vybere slevu za opakování a na umístění nebude vůbec sahat, tak by se to mělo také v celkem převexlovat na třeba 570. Navíc ono umístění mi tam dělá paseku. nejdříve se to počítalo blbě, ted pro změnu vůbec...
Výpočet tam teď mám

inputB.value = parseFloat(a);
inputD.value = parseFloat(b)/100 * parseFloat(c);
inputF.value = (parseFloat(b) - parseFloat(d)) * parseFloat(f);
inputG.value = (parseFloat(b) + parseFloat(f)) - parseFloat(d);

a u toho umístění select

<select id="umisteni" name="druh" size="1" onchange="change()">
  <option value="1">na inzertní ploše</option>
  <option value="1.5">v textu</option>
</select>

Neviem, či si to už vyriešil, ale podľa toho, čo som čítal na jakpsatweb, tak asi nie.

Tam Ti radil niekto použiť funkcie parseInt alebo parseFloat, ale to je blbosť, pretože konverziu na číslo už robíš odpočítaním nuly. Teraz napríklad vidím, že na webe máš parseFloat - to vyhoď.

Skontroluj si, či počítaš s dobrými hodnotami, ako Ti tam dobre radí Joker:

inputD.value = b * (1 - c);
inputF.value = (b - d /* toto d je pôvodná hodnota z inputD a nie tá, ktorú si vypočítal o riadok vyššie */) * e;

Ak chceš zobrazovať nulu v prípade, že sa nepodarilo vypočítať výsledok, tak kontroluj, či je výsledok číslo funkciou isNaN tak, ako to máš v pôvodnom skripte, ale namiesto prázdneho reťazca tam daj reťazec, v ktorom je nula.

Na zaokrúhľovanie môžeš použiť Math.round (zaokrúhlenie k najbližšiemu celému číslu), Math.floor (zaokrúhlenie nadol) alebo Math.ceil (zaokrúhlenie nahor).

A hlavne čítaj chybové hlásenia. Keď Ti to predtým vypisovalo, že inputF nie je definované, tak na to si mohol prísť sám. FF nie je mlčanlivý, ale ak chceš vidieť takéto chyby, tak si musíš otvoriť konzolu s JavaScriptom - potom stačí kliknúť na odkaz pri chybe a rovno Ti to ukáže, kde nastala (na rozdiel od IE).

Já to snad nedokážu. 1 000 000 pokusů, všechno blbě. Skončil jsem u

inputB.value = 0 + (isNaN (format)? "0": format_result);
inputD.value = (b/100 * c) + (isNaN (slevy)? "0": slevy_result);
inputF.value = (b - d) + (isNaN (umisteni)? "0": umisteni_result);
inputG.value = (b * c) + f ;

a to už mi nechodí vůbec, že prý format není definováno a rty nuly se mi tam také neobjevily.

Hurá už jsem to s tím od jokera částečně rozchodil. Jen když se ta stránka načte, mělo by se objevit "předvyplněné", jako když si objedná nejmenší inzerát za 300, bez opakování a standardní umístění. Tím tam naskočí i nuly a výsledek.
celé to mám 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;
  
}

co dát u toho a value 300?

ještě matematický oříšek. On je ten výpořet špatně zadaný, jelikož to nepočítá slevu třeba na 3, ale pouze z jednoho. Teď je tam

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

a = select typ inzerátu
b = zobrazí se výběr z "a" v Kč
c = select pro zadání opakování
d = result slev (chybí * počet inzerátů)
e = select na výběr místa (příplatek)
f = result na místo
g = celkem

1) V políčku "Za opakování Vám slevíme" se nesčítají slevy, ale je tam jen sleva z jednoho inzerátu.
Příklad: Základní sazba za zvolený formát inzerátu: 300 Kč
Počet zveřejnění: 3 x (10 % sleva)
Sleva: 90 Kč (ukazuje to tam ale pouze 30 Kč, tedy pouze slevu za jeden
inzerát)
2) V políčku "Konečná cena inzerátu" se ukazuje cena pouze za jeden inzerát, přestože si jich objedná třeba 3.

Možná by stačilo změnit hodnoty value a toho selectu na slevy a onen příklad počítat jinak. Místo b/100... nějaké * 0.95...
Ten select teď je

<select id="slevy" name="slevy" size="1" onchange="change()">
  <option value="0">1 inzerát</option>
  <option value="5">2 inzeráty</option>
  <option value="10">3 inzeráty</option>
  <option value="15">6 inzerátů</option>
  <option value="30">12 inzerátů</option>
</select>

http://krata.bubakov.net/www/gelton/formular-sl_lis ty.html

Zpět do poradny Odpovědět na původní otázku Nahoru