개발 Q&A

제목 숫자 입력에 따른 자동계산되도록 할려고 합니다.
카테고리 JavaScript
글쓴이 정수리 작성시각 2018/11/23 16:40:47
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 9846   RSS

onkeyup을 통해

 

숫자를 입력하면서 자동으로 더하기 하여 

 

결과를 구하고 있습니다.

 

현재 덧셈 계산은 문제 없이 잘되는데

 

뺄셈 계산시 문제가 발생하네요 ㅜㅜ

 

onkeyup를 통해

뺄셈 계산을 하다 보니 

1,000,000 숫자에서 100,000을 뺄때

처음 1이 계산이되고 다른 10 계산이 되고 다음에는 100, 1000

 

이런식으로 계산이 되다보니 정확한 계산이 안되네요...

 

onkeyup을 change로 바꾼후에

 

계산을 할경우 숫자를 입력하고 텝을 통해 다른으로 넘어가면

똑같은 숫자가 한번더 뺄셈이 되버립니다 ㅜㅜ...

 

어떻게 수정해야 정확한 뺄셈 계산을 할수 있을까요?

 

inputNumberFormat2()함수를 통해 자동계산하여 더하기 결과값이 areaMoney에 입력이 되고
contractMoney, wasteMoney, etcMoney에 숫자를 입력하면
inputNumberFormat3()함수를 사용하여
areaMoney에서 해당 입력값들을 뺄셈연산을 통해 결과값을 다시 areaMoney에 반환합니다.


<input type="text" name="countryMoney" value="'.number_comma($getContract['countryMoney']).'" onkeyup="inputNumberFormat2(this, \'countryMoney\')"/>
<input type="text" name="cityMoney" value="'.number_comma($getContract['cityMoney']).'" onkeyup="inputNumberFormat2(this, \'cityMoney\')"/>
<input type="text" name="groupMoney" value="'.number_comma($getContract['groupMoney']).'" onkeyup="inputNumberFormat2(this, \'groupMoney\')"/>
<input type="text" name="giMoney" value="'.number_comma($getContract['giMoney']).'" onkeyup="inputNumberFormat2(this, \'giMoney\')"/>

<input type="text" name="areaMoney"  value="'.number_comma($getContract['areaMoney']).'" onkeyup="inputNumberFormat(this, \'areaMoney\')"/>

<input type="text" name="contractDMoney" value="'.number_comma($getContract['contractDMoney']).'" onkeyup="inputNumberFormat(this , \'contractDMoney\')" change="test1()" '.$this->disabled.'/>
getContract['wasteMoney']).'" onkeyup="inputNumberFormat3(this, \'wasteMoney\')"/>
<input type="text" name="wasteMoney"  value="'.number_comma($getContract['wasteMoney']).'" onkeyup="inputNumberFormat3(this, \'wasteMoney\')"/>
<input type="text" name="etcMoney"  value="'.number_comma($getContract['etcMoney']).'" onkeyup="inputNumberFormat3(this , \'etcMoney\')"/>

function inputNumberFormat2(obj,name)//숫자 입력에 따른 콤마 붙임 및 평균단가를 구함
{	
	var num=comma(uncomma(obj.value));
	$('input[name="'+name+'"]').val(num);
	


	
	var s1 = $('input[name="countryMoney"]').val();
	
  	var s2 = $('input[name="cityMoney"]').val();

  	var s3 = $('input[name="groupMoney"]').val();

  	var s4 = $('input[name="giMoney"]').val();

  		
  			s1 = s1.replace(/,/g, '');
  			s2 = s2.replace(/,/g, '');
  			s3 = s3.replace(/,/g, '');
  			s4 = s4.replace(/,/g, '');

  			s1 =  Number(s1);
  			s2 =  Number(s2);
  			s3 =  Number(s3);
  			s4 =  Number(s4);

  			/*if(s1!= 0 && s2== 0){
  				s2 = s1;
  			} else if (s1 == 0 && s2 != 0){
  				s1 = s2;
  			}*/
  	
  			var r =  s1+s2+s3+s4;

  			r =  Math.ceil(r);
  			r = comma(uncomma(r));
  			//r =  chage_zero(r);
  			
 	 	$('input[name="areaMoney"]').val(r);
 	 	$('input[name="gongsaMoney"]').val(r);

		
}

function inputNumberFormat3(obj,name)//숫자 입력에 따른 콤마 붙임 및 평균단가를 구함
{	
	var num=comma(uncomma(obj.value));
	$('input[name="'+name+'"]').val(num);
	


	
	var s1 = $('input[name="contractDMoney"]').val();
	
  	var s2 = $('input[name="wasteMoney"]').val();

  	var s3 = $('input[name="etcMoney"]').val();

  	var s4 = $('input[name="gongsaMoney"]').val();

  		
  			s1 = s1.replace(/,/g, '');
  			s2 = s2.replace(/,/g, '');
  			s3 = s3.replace(/,/g, '');
  			s4 = s4.replace(/,/g, '');

  			/*s1 =  Number(s1);
  			s2 =  Number(s2);
  			s3 =  Number(s3);
  			s4 =  Number(s4);*/

  			/*if(s1!= 0 && s2== 0){
  				s2 = s1;
  			} else if (s1 == 0 && s2 != 0){
  				s1 = s2;
  			}*/
  			
  			var r =  s4-(s1+s2+s3);
  			
  			console.log(r);
  		//	r =  Math.ceil(r);
  			r = comma(uncomma(r));
  			//r =  chage_zero(r);
  			

 	 	$('input[name="gongsaMoney"]').val(r);

		
}

 

 다음글 PHP extension 문제 (2)
 이전글 구글링해서 코딩했는데 저는 이렇게 저렇게 해봐도 aj... (3)

댓글

한대승(불의회상) / 2018/11/23 16:53:26 / 추천 0
focusout 이벤트를 사용하세요.
정수리 / 2018/11/23 17:02:49 / 추천 0

@한대승

focusout이벤트를 사용할경우

contractMoney에 금액을 입력하고

wasteMoney에 금액을 입력하지 않고

탭키를 누르면 contractMoney에서 입력하였던 금액이 또 계산이 되어버리네요;;

focusout이벤트가 contractMoney에서만 적용되는게 아니라 밑에 있는 wasteMoney, etctMoney에도 적용이 되는것 같습니다 ㅜㅜ

 

 

하늘치 / 2018/11/26 11:17:21 / 추천 0

onkeyup 이건, focusout 이건간에, 

inputNumberFormat3() 요 함수가 걸려있으니 각 이벤트마다 실행이 되는 상황으로 보이네요.

3개의 input 태그에 onkey 함수가 걸려있던데, 탭키도 키니까요.. 그래서 중복 계산되는 게 아닐까 싶은데..

함수를 하나에만 걸어놓고 테스트를 한 번 해보시는 게 어떨런지요.