2011-11-16 97 views
0

我與3個輸入動態輸入(

當用戶鍵入一個腳本應該計算一些結果的腳本中的問題。它的工作原理幾乎,因爲它應該exept當Sale輸入具有價值和用戶編輯Avance輸入,腳本不返回結果?

http://jsfiddle.net/pxaYf/

<div id="tst" style="border:1px solid black; background:white; width:100px; height:100px"></div> 

Cost = <input id="inp_cost" type="text" /><br> 
Avance = <input id="inp_avance" type="text" /><br> 
Sale = <input id="inp_sale" type="text" /><br> 

$(function(){ 
    var calc = function(){ 
     var Calc = new Calc_avance(); 
     Calc.cost = $('#inp_cost').val(); 
     Calc.avance = $('#inp_avance').val(); 
     Calc.sale = $('#inp_sale').val(); 
     Calc.calc(); 

     $('#tst').html('<div>cost = '+Calc.cost+'</div><div>avance = '+Calc.avance+'</div><div>sale = '+Calc.sale+'</div>'); 

     return Calc; 
    }; 

    var calc_cost = function(){ 
     var Calc = calc(); 
    }; 

    $('#inp_cost').change(calc_cost) 
     .keyup(calc_cost); 

    var calc_avance = function(){ 
     var Calc = calc(); 
    }; 

    $('#inp_avance').change(calc_avance) 
     .keyup(calc_avance); 

    var calc_sale = function(){ 
     var Calc = calc(); 
    }; 

    $('#inp_sale').change(calc_sale) 
     .keyup(calc_sale); 
}); 

function Calc_avance(){ 
    this.cost = 0; 
    this.avance = 0; 
    this.sale = 0; 

    this.calc = function(){ 
     this.cost = parseFloat(this.cost.replace(',', '.')); 
     this.avance = parseFloat(this.avance.replace(',', '.')); 
     this.sale = parseFloat(this.sale.replace(',', '.')); 

     if(!isNumber(this.cost)){ 
      this.cost = 0; 
     } 

     if(!isNumber(this.avance)){ 
      this.avance = 0; 
     } 

     if(!isNumber(this.sale)){ 
      this.sale = 0; 
     } 

     if(this.cost){ 
      if(this.sale){ 
       this.avance = (this.sale - this.cost)/this.sale * 100; 
      } 

      if(this.avance){ 
       this.sale = this.cost/(100 - this.avance) * 100; 
      } 
     } 
     else{ 
      this.avance = 0; 
     } 

     if(this.avance < 0){ 
      this.avance = 0; 
     } 
    }; 
} 

function isNumber(n){ 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

回答

0

那麼你的腳本不返回一個值,你的意思是不會發布的值?你的輸入沒有名字,只有ID,所以他們根本不會POST。

此外,我看到您的代碼有趣的遞歸問題。 calc_avance調用calc來調用Calc_avance,它是一個複雜的混亂。

總而言之,我認爲你能做的最大的事情就是放棄你所擁有的東西並重新開始。它看起來像你試圖做的很簡單,你只是在複雜的問題

+0

你在哪裏看到遞歸? :) – clarkk

+0

是的,它可以做得更簡單一些,但它是我所忽略的更多東西的一部分 – clarkk