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ě?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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ě… nový
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… nový
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… nový
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… nový
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… nový
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… nový
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

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