묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
자동계산 도와주세요..ㅡ.ㅜ
2004.11.19 11:39
http://www.seearch.co.kr/ts.jpg벌써 몇일재 이것만 하고 있습니다.
링크된 그림과 같이 빨간부분에 숫자를 바꾸면 파란부분에 합계가 자동으로 계산되도록 구현해야합니다.
숫자를 쓰는 칸과 합계칸에는 text input 박스가 있으며 스타일에서 테둘이를 하얀색으로 했기때문에 안보이는거구요
전 onkeypress와 onkeyup을 이용해서 onkeypress때 이미 기록되었던 숫자를 다른 히든인풋박스에 넣고 onkeyup때 새로 기록된 숫자와의 차이를 합계칸에 더해주는 방법을 생각했는데
처음엔 잘되는 거 같았는데
커서가 다른 숫자칸으로 이동할때도 onkeyup이벤트가 일어나는거 같았습니다.
그래서 결과적으로 커서가 다른칸으로 이동할때 앞에서 계산한 값이 합계에 한번 더 더해져서 틀려지더군요
그래서 if( !((47 < event.keyCode && event.keyCode < 58) || (event.keyCode == 08) || (event.keyCode == 46) )){.....와 같이 넣어봤는데 아스키코드가 48-57까지(그러니까 숫자) 는 잘 먹는거 같은데 08번(백스페이스)이나 46번(del키)으로 지울때는 이벤트가 안일어나더라구요.
아 그리구 del키 아스키값도 좀 이상해요. 표에서 찾아본바로는 126인가? 그랬는데 나모웹에서는 46으로 뜨더군요...
제가 써본 소스는 다음과 같구요
<SCRIPT LANGUAGE="JavaScript">
<!--
function calc_ready(obj,i,j,type){
if( !((47 < event.keyCode && event.keyCode < 58) || (event.keyCode == 08) || (event.keyCode == 46) )){
return false;
}
form1.temp_value.value= obj.value;
form1.temp_i.value= i;
form1.temp_j.value= j;
form1.temp_type.value= type;
return true;
}
function calc(obj,i,j,type){
if( !((47 < event.keyCode && event.keyCode < 58) || (event.keyCode == 08) || (event.keyCode == 46) ))
return false;
form1.temp.value= 1 * obj.value - 1 * form1.temp_value.value;
if(type == 'p'){
<?
for($ii=0;$ii <= 10 ;$ii++){
if ($ii<>0) echo"tt }else if(i==$ii){ n";
else echo"tt if(i==$ii){ n";
for($jj=0;$jj <= 10 ;$jj++){
if ($jj<>0) echo"ttt }else if(j==$jj){ n";
else echo"ttt if(j==$jj){ n";
echo"tttt form1.W_$ii.value= 1 * form1.W_$ii.value + 1 * form1.temp.value; n";
echo"tttt form1.WP_$jj.value= 1 * form1.WP_$jj.value +1 * form1.temp.value; n";
echo"tttt form1.TSUM_$jj.value= 1 * form1.TSUM_$jj.value + 1 * form1.temp.value; n";
}
echo "ttt } n";
}
echo "tt } n";
?>
}else if(type == 'ib1'){
<?
for($ii=0;$ii <= 10 ;$ii++){
if ($ii<>0) echo"tt }else if(i==$ii){ n";
else echo"tt if(i==$ii){ n";
for($jj=0;$jj <= 10 ;$jj++){
if ($jj<>0) echo"ttt }else if(j==$jj){ n";
else echo"ttt if(j==$jj){ n";
echo"tttt form1.W_etc1_$ii.value= 1 * form1.W_etc1_$ii.value + 1 * form1.temp.value; n";
echo"tttt form1.WP_etc1_$jj.value= 1 * form1.WP_etc1_$jj.value + 1 * form1.temp.value; n";
echo"tttt form1.TSUM_$jj.value= 1 * form1.TSUM_$jj.value + 1 * form1.temp.value; n";
}
echo "ttt } n";
}
echo "tt } n";
?>
}else if(type == 'ib2'){
<?
for($ii=0;$ii <= 10 ;$ii++){
if ($ii<>0) echo"tt }else if(i==$ii){ n";
else echo"tt if(i==$ii){ n";
for($jj=0;$jj <= 10 ;$jj++){
if ($jj<>0) echo"ttt }else if(j==$jj){ n";
else echo"ttt if(j==$jj){ n";
echo"tttt form1.W_etc2_$ii.value= 1 * form1.W_etc2_$ii.value + 1 * form1.temp.value; n";
echo"tttt form1.WP_etc2_$jj.value= 1 * form1.WP_etc2_$jj.value + $jj * form1.temp.value; n";
echo"tttt form1.TSUM_$jj.value= 1 * form1.TSUM_$jj.value + $jj * form1.temp.value; n";
}
echo "ttt } n";
}
echo "tt } n";
?>
}
return true;
}
function temp(){
return false;
}
//-->
</SCRIPT>
.
.
.
.
.
<input type='text' name='F_".$j."[]' size='1' value='".$workrec_time[$i][$k]."' class='lds_class' onkeypress=calc_ready(this,".$i.",".$j.",'p') onkeyup=calc(this,".$i.",".$j.",'p') onBlur=temp()>
아참 문제는 저 빨간부분의 가로 세로 갯수가 수시로 변한다는것입니다.
그래서 지금은 컬럼이
그래서 전체합을 다시 구하기에는...ㅜ.ㅜ
ONCHANGE이벤트마다 새로계산도 생각해봤는데..
새로계산에 딱 한가지 문제가 있습니다.
가로 세로 갯수가 수시로 변하고
저장기능을 생각해서
빨간부분의 text박스의 이름을
F_1[],F_2[],F_3[],F_4[].....
F_1[],F_2[],F_3[],F_4[].....
F_1[],F_2[],F_3[],F_4[].....
F_1[],F_2[],F_3[],F_4[].....
F_1[],F_2[],F_3[],F_4[].....
와 같이 만들었거든요
근데 새로계산하려니 자바스크립트에서
form1.F_1[1].value
form1.F_1[2].value
form1.F_1[3].value
form1.F_1[4].value...
와 같이 하면 필드를 인식못하는거 같던데..ㅜ.ㅜ
꼭 좀 부탁드립니다..ㅠ.ㅠ
링크된 그림과 같이 빨간부분에 숫자를 바꾸면 파란부분에 합계가 자동으로 계산되도록 구현해야합니다.
숫자를 쓰는 칸과 합계칸에는 text input 박스가 있으며 스타일에서 테둘이를 하얀색으로 했기때문에 안보이는거구요
전 onkeypress와 onkeyup을 이용해서 onkeypress때 이미 기록되었던 숫자를 다른 히든인풋박스에 넣고 onkeyup때 새로 기록된 숫자와의 차이를 합계칸에 더해주는 방법을 생각했는데
처음엔 잘되는 거 같았는데
커서가 다른 숫자칸으로 이동할때도 onkeyup이벤트가 일어나는거 같았습니다.
그래서 결과적으로 커서가 다른칸으로 이동할때 앞에서 계산한 값이 합계에 한번 더 더해져서 틀려지더군요
그래서 if( !((47 < event.keyCode && event.keyCode < 58) || (event.keyCode == 08) || (event.keyCode == 46) )){.....와 같이 넣어봤는데 아스키코드가 48-57까지(그러니까 숫자) 는 잘 먹는거 같은데 08번(백스페이스)이나 46번(del키)으로 지울때는 이벤트가 안일어나더라구요.
아 그리구 del키 아스키값도 좀 이상해요. 표에서 찾아본바로는 126인가? 그랬는데 나모웹에서는 46으로 뜨더군요...
제가 써본 소스는 다음과 같구요
<SCRIPT LANGUAGE="JavaScript">
<!--
function calc_ready(obj,i,j,type){
if( !((47 < event.keyCode && event.keyCode < 58) || (event.keyCode == 08) || (event.keyCode == 46) )){
return false;
}
form1.temp_value.value= obj.value;
form1.temp_i.value= i;
form1.temp_j.value= j;
form1.temp_type.value= type;
return true;
}
function calc(obj,i,j,type){
if( !((47 < event.keyCode && event.keyCode < 58) || (event.keyCode == 08) || (event.keyCode == 46) ))
return false;
form1.temp.value= 1 * obj.value - 1 * form1.temp_value.value;
if(type == 'p'){
<?
for($ii=0;$ii <= 10 ;$ii++){
if ($ii<>0) echo"tt }else if(i==$ii){ n";
else echo"tt if(i==$ii){ n";
for($jj=0;$jj <= 10 ;$jj++){
if ($jj<>0) echo"ttt }else if(j==$jj){ n";
else echo"ttt if(j==$jj){ n";
echo"tttt form1.W_$ii.value= 1 * form1.W_$ii.value + 1 * form1.temp.value; n";
echo"tttt form1.WP_$jj.value= 1 * form1.WP_$jj.value +1 * form1.temp.value; n";
echo"tttt form1.TSUM_$jj.value= 1 * form1.TSUM_$jj.value + 1 * form1.temp.value; n";
}
echo "ttt } n";
}
echo "tt } n";
?>
}else if(type == 'ib1'){
<?
for($ii=0;$ii <= 10 ;$ii++){
if ($ii<>0) echo"tt }else if(i==$ii){ n";
else echo"tt if(i==$ii){ n";
for($jj=0;$jj <= 10 ;$jj++){
if ($jj<>0) echo"ttt }else if(j==$jj){ n";
else echo"ttt if(j==$jj){ n";
echo"tttt form1.W_etc1_$ii.value= 1 * form1.W_etc1_$ii.value + 1 * form1.temp.value; n";
echo"tttt form1.WP_etc1_$jj.value= 1 * form1.WP_etc1_$jj.value + 1 * form1.temp.value; n";
echo"tttt form1.TSUM_$jj.value= 1 * form1.TSUM_$jj.value + 1 * form1.temp.value; n";
}
echo "ttt } n";
}
echo "tt } n";
?>
}else if(type == 'ib2'){
<?
for($ii=0;$ii <= 10 ;$ii++){
if ($ii<>0) echo"tt }else if(i==$ii){ n";
else echo"tt if(i==$ii){ n";
for($jj=0;$jj <= 10 ;$jj++){
if ($jj<>0) echo"ttt }else if(j==$jj){ n";
else echo"ttt if(j==$jj){ n";
echo"tttt form1.W_etc2_$ii.value= 1 * form1.W_etc2_$ii.value + 1 * form1.temp.value; n";
echo"tttt form1.WP_etc2_$jj.value= 1 * form1.WP_etc2_$jj.value + $jj * form1.temp.value; n";
echo"tttt form1.TSUM_$jj.value= 1 * form1.TSUM_$jj.value + $jj * form1.temp.value; n";
}
echo "ttt } n";
}
echo "tt } n";
?>
}
return true;
}
function temp(){
return false;
}
//-->
</SCRIPT>
.
.
.
.
.
<input type='text' name='F_".$j."[]' size='1' value='".$workrec_time[$i][$k]."' class='lds_class' onkeypress=calc_ready(this,".$i.",".$j.",'p') onkeyup=calc(this,".$i.",".$j.",'p') onBlur=temp()>
아참 문제는 저 빨간부분의 가로 세로 갯수가 수시로 변한다는것입니다.
그래서 지금은 컬럼이
그래서 전체합을 다시 구하기에는...ㅜ.ㅜ
ONCHANGE이벤트마다 새로계산도 생각해봤는데..
새로계산에 딱 한가지 문제가 있습니다.
가로 세로 갯수가 수시로 변하고
저장기능을 생각해서
빨간부분의 text박스의 이름을
F_1[],F_2[],F_3[],F_4[].....
F_1[],F_2[],F_3[],F_4[].....
F_1[],F_2[],F_3[],F_4[].....
F_1[],F_2[],F_3[],F_4[].....
F_1[],F_2[],F_3[],F_4[].....
와 같이 만들었거든요
근데 새로계산하려니 자바스크립트에서
form1.F_1[1].value
form1.F_1[2].value
form1.F_1[3].value
form1.F_1[4].value...
와 같이 하면 필드를 인식못하는거 같던데..ㅜ.ㅜ
꼭 좀 부탁드립니다..ㅠ.ㅠ
elements['F_1[]'] 처럼 사용을 해야 합니다.
계산방식을 바꾸면 어떨까요..?
이벤트가 일어날때마다 처음부터 새로 계산을 하는 겁니다.
필드가 많다면 브라우저에서 심하게 압박을 받겠지만, 단순 계산이라 그렇게 심할것 같진 않습니다.
어쨌든 계속 새로 계산을 한다면 중복되서 계산 될일은 없겠죠..? ^^*