Javascript - real time pocitanie

Programovacie jazyky, rady, poradňa...
dado26
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 112
Registrovaný: 06 okt 2005, 17:45
Bydlisko: SVK

Javascript - real time pocitanie

Príspevok od používateľa dado26 »

Zdravim, mam taky problem. potrebujem aby mi tento script pocital real time. Zaklad funguje, ale niekde je chyba v tom Checkboxe, lebo nechce fungovat. no zial ako tak pozeram nevidim kde :(

Problem je ten, ze ked zmenim jeho zaskrtnutie, zmena v sume nenastane hned, ale musim zmenit nejaku inu hodnotu a az potom sa pocita s novym "checkboxom"

Javascript

Kód: Vybrať všetko

<script type="text/javascript">
function startCalc(){
  interval = setInterval("calc()",1);
}
function calc(){
  if(document.autoSumForm.box3vazba.checked==true)
  {
    cenavazby = 8;
  } 
    else 
  { 
    cenavazby = 0; 
  }
  a = document.autoSumForm.box1cb.value;
  b = document.autoSumForm.box2f.value; 
  kusy = document.autoSumForm.box4kopie.value; 
  document.autoSumForm.spolu.value = ( (a * 0.05) + (b * 0.25) + cenavazby ) * kusy;
}
function stopCalc(){
  clearInterval(interval);
}
</script>
HTML

Kód: Vybrať všetko

<form name="autoSumForm">
<table>
  <tr>
    <td>Čierno biele strany</td>
    <td><input type="text" class="metro" name="box1cb" value="" onKeydown="startCalc();" onKeyup="stopCalc();" /></td>
  </tr>
  <tr>
    <td>Farebné strany</td>
    <td><input type="text" name="box2f" value="" onKeydown="startCalc();" onKeyup="stopCalc();" /></td>
  </tr>
  <tr>
    <td>Tvrdá väzba?</td>
    <td><input type="checkbox" name="box3vazba" checked="checked" onClick="startCalc()" onBlur="stopCalc();" /></td>
  </tr>
  <tr>
    <td>Počet kusov</td>
    <td><input type="text" name="box4kopie" value="1" onKeydown="startCalc();" onKeyup="stopCalc();" /></td>
  </tr>
  <tr>
    <td>Cena spolu</td>
    <td><input type="text" type="text" name="spolu" /></td>
  </tr>
</table>
</form>
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Javascript - real time pocitanie

Príspevok od používateľa *****HERO***** »

ved na onchange toho checkboxu nabinduj priamo funkciu calc()

Kód: Vybrať všetko

<input type="checkbox" name="box3vazba" checked="checked" onchange="calc()" />
dado26
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 112
Registrovaný: 06 okt 2005, 17:45
Bydlisko: SVK

Re: Javascript - real time pocitanie

Príspevok od používateľa dado26 »

aj tak to nefunguje: demo
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Javascript - real time pocitanie

Príspevok od používateľa audiotrack »

ani keď to napojíš na ten div? Na checkbox tam máš nejakú knižnicu, len je minimalizovaná tak to nikto nebude lúštiť ako funguje. Ale zrejme ho teda prekrýva ten div a on odchytáva eventy, súdiac podľa toho že sa mu mení classname pri prechode a kliku
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Javascript - real time pocitanie

Príspevok od používateľa *****HERO***** »

ako bolo spomenute, pouzivas kniznicu iCheck, co ti nahradi klasicky checkbox za div a teda ti klasicky netriggerne eventy co mas na tom checkboxe

dopln tento kod do document.ready eventu, za inicializaciou iChecku. ( http://fronteed.com/iCheck/#callbacks )

Kód: Vybrať všetko

$(':checkbox').on('ifChanged', function(){
  calc();
});
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Javascript - real time pocitanie

Príspevok od používateľa S-player »

Videl som už všeličo ,ale robiť niečo také za pomoci intervalu & 1ms... tak toto som ešte fakt nevidel.

Kód: Vybrať všetko

function calc(){
  if(document.autoSumForm.box3vazba.checked==true)
  {
    cenavazby = 8;
  } 
    else 
  { 
    cenavazby = 0; 
  }
  a = document.autoSumForm.box1cb.value;
  b = document.autoSumForm.box2f.value; 
  kusy = document.autoSumForm.box4kopie.value; 
  document.autoSumForm.spolu.value = ( (a * 0.05) + (b * 0.25) + cenavazby ) * kusy;
}

Kód: Vybrať všetko

function calculate() {
   var form = document.autoSumForm,
       cenaVazby = form.box3vazba.checked ? 8 : 0;
  
  var a = form.box1cb.value,
      b = form.box2f.value,
      c = form.box4kopie.value; // Už keď sa začala používať abeceda

  document.autoSumForm.spolu.value = ((a * 0.05) + (b * 0.25) + cenaVazby) * c;
}
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Javascript - real time pocitanie

Príspevok od používateľa audiotrack »

a pointa prepísania jednej funkcie na takú istú funkciu len si premenoval jej meno, a niektoré premenné je aká?
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Javascript - real time pocitanie

Príspevok od používateľa S-player »

Chápem ,že to nerieši daný problém, prepísal som to preto lebo sa mi nato ťažko pozerá.

// Nieje to len o premenovaní premenných.
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Javascript - real time pocitanie

Príspevok od používateľa weroro »

Kód: Vybrať všetko

<form name="autoSumForm">
    <table>
      <tr>
        <td>Čierno biele strany</td>
        <td><input type="text" class="metro" name="ciernobiela" value="" onkeyup="calc.pocitaj();" /></td>
      </tr>
      <tr>
        <td>Farebné strany</td>
        <td><input type="text" name="farba" value="" onkeyup="calc.pocitaj();" /></td>
      </tr>
      <tr>
        <td>Tvrdá väzba?</td>
        <td><input type="checkbox" name="vazba" checked="checked" onclick="calc.pocitaj();" /></td>
      </tr>
      <tr>
        <td>Počet kusov</td>
        <td><input type="text" name="kusy" value="1" onkeyup="calc.pocitaj();" /></td>
      </tr>
      <tr>
        <td>Cena spolu</td>
        <td><input type="text" type="text" name="spolu" /></td>
      </tr>
    </table>
</form>
<script type="text/javascript">
if (!calc)
{
    var calc =
    {
        vazba : 8,
        cena1 : 0.05,
        cena2 : 0.25,
        pocitaj : function ()
        {
            var form = document.autoSumForm;
            var cenavazby = (form.vazba.checked) ? this.vazba : 0;
            var ciernobiela = parseInt(form.ciernobiela.value);
            var farebna = parseInt(form.farba.value);
            var kusy = parseInt(form.kusy.value);
            if (isNaN(ciernobiela)) ciernobiela = 0;
            if (isNaN(farebna)) farebna = 0;
            if (isNaN(kusy)) kusy = 0;
            form.spolu.value = ((ciernobiela * this.cena1) + (farebna * this.cena2) + cenavazby) * kusy;
        }
    }
}
calc.pocitaj();
</script>
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Javascript - real time pocitanie

Príspevok od používateľa S-player »

Kód: Vybrať všetko

 pocitaj : function ()
{
    var form = document.autoSumForm;
    var cenavazby = (form.vazba.checked) ? this.vazba : 0;
    var ciernobiela = parseInt(form.ciernobiela.value) || 0;
    var farebna = parseInt(form.farba.value) || 0;
    var kusy = parseInt(form.kusy.value) || 0;
    form.spolu.value = ((ciernobiela * this.cena1) + (farebna * this.cena2) + cenavazby) * kusy;
}
alebo

Kód: Vybrať všetko

 pocitaj : function ()
{
    var form = document.autoSumForm;
    var cenavazby = (form.vazba.checked) ? this.vazba : 0;
    var ciernobiela = ~~form.ciernobiela.value;
    var farebna = ~~form.farba.value;
    var kusy = ~~form.kusy.value;
    form.spolu.value = ((ciernobiela * this.cena1) + (farebna * this.cena2) + cenavazby) * kusy;
}
dado26
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 112
Registrovaný: 06 okt 2005, 17:45
Bydlisko: SVK

Re: Javascript - real time pocitanie

Príspevok od používateľa dado26 »

super, dakujem vam chlapci. sam by som to neopravil. venujem sa webu iba vo volnom case a v javascripte som nikdy nerobil.
na icheck.js som uplne zabudol, moja chyba.
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Javascript - real time pocitanie

Príspevok od používateľa weroro »

S-player: Tie vlnky, to je čo za haluz? Nepoznám to. :)
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Javascript - real time pocitanie

Príspevok od používateľa S-player »

Ide o operátor ,ktorý sa používa na prácu s bitmi v tomto prípade (~) pre negáciu. Tých operátorov je niekoľko viz. https://developer.mozilla.org/en/docs/W ... _Operators. Okrem čisto bitových operácii ich ,ale môžeš použiť aj na rôzne matematické operácie (inc, dec, floor...) prípadne nejaké malé nazvyme to "hacky" ako ten vyššie.

Tu je o tom celkom dobrý článok aj keď ide o Cčko http://lab.polygonal.de/?p=81
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Javascript - real time pocitanie

Príspevok od používateľa pcsiete »

Je to proste vynútená konverzia na celé číslo (zanedbanie zlomkovej/desatinnej časti), negácia z n na (-n -1), a znova negácia naspäť (-(-n -1) -1).
Napísať odpoveď