2011-11-16 4 views
0

는 I 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_avance를 호출하는 calc를 호출합니다.

나는 당신이 할 수있는 가장 큰 일은 가지고있는 것을 폐기하고 다시 시작하는 것이라고 생각합니다. 당신이하려는 일이 정말로 간단하고 문제가 복잡 해졌음처럼 보입니다.

+0

어디에서 재귀가 보입니까? :) – clarkk

+0

네, 좀 더 간단하게 만들 수 있지만 그 부분은 더 이상 제가 버렸습니다. – clarkk