채택완료

코드 좀 줄이고 싶어요

2016-10-10 (월) 11:35:40 2,247

소스 참고해서 만들고 있는데...

2줄은 했습니다.

이런 식으로 20행을 해야 하는데..

스크립트 엄청 길어질거 같은데..

줄일 수 있을련지요,,,

그리고  가로 합계금액은 class로 지정하고

 

맨밑에 all_total로 총계를 뽑고 싶은데...자바 class부분은 

어떻게 처리해야 할지요,, 

<script language='javascript'> 

    function sum(){ 

        var f1_1 = document.getElementById('f1_1'); 

        var f1_2 = document.getElementById('f1_2'); 

        var f1_3 = document.getElementById('f1_3'); 

        var f1_4 = document.getElementById('f1_4'); 

        f1_4.value = Number(f1_1.value)*Number(f1_2.value)+Number(f1_3.value); 

        var f2_1 = document.getElementById('f2_1'); 

        var f2_2 = document.getElementById('f2_2'); 

        var f2_3 = document.getElementById('f2_3'); 

        var f2_4 = document.getElementById('f2_4'); 

        f2_4.value = Number(f2_1.value)*Number(f2_2.value)+Number(f2_3.value); 

    total.value = Number(f1_4.value)+Number(f2_4.value);

    } 

</script> 

<INPUT  id=f1_1 onkeyup="sum();"> 

<INPUT  id=f1_2 onkeyup="sum();"> 

<INPUT  id=f1_3 onkeyup="sum();"> 

<INPUT  id=f1_4 clase=total><br>

<INPUT  id=f2_1 onkeyup="sum();"> 

<INPUT  id=f2_2 onkeyup="sum();"> 

<INPUT  id=f2_3 onkeyup="sum();"> 

<INPUT  id=f2_4 clase=total>

|

답변 3개 / 댓글 7개

채택된 답변
+20 포인트
2016-10-10 (월) 11:54:05
Copy
<script language='javascript'> function sum(n) {    var t = 0;    for(i=1; i<4; i++) {        t = t + Number(document.getElementById("f" + n + "_" + i).value);    }    document.getElementById("f" + n + "_4").value = t;}</script> <INPUT  id=f1_1 onkeyup="sum(1);"> <INPUT  id=f1_2 onkeyup="sum(1);"> <INPUT  id=f1_3 onkeyup="sum(1);"> <INPUT  id=f1_4 name=total><br><INPUT  id=f2_1 onkeyup="sum(2);"> <INPUT  id=f2_2 onkeyup="sum(2);"> <INPUT  id=f2_3 onkeyup="sum(2);"> <INPUT  id=f2_4 name=total>

jquery로 처리하면 훨씬 간단하게 될 것 같은데 javascript로만 하셔서... 

답변에 대한 댓글 5개

2016-10-10 (월) 12:00:44
존경스럽습니다,,정말 간결하고 잘되네요~

1과2를 곱한뒤에 3은 더해야 하는데
이경우 어디를 고쳐야 하는지요,
그리고
각 total이 나오면

맨밑에 all_total 을 내고 싶은데..도와주십시오.
늘 맨입으로 받아먹어서 죄송스러워요,,,
[code]
function sum(n) {
var t = new Array();
for(i=1; i<4; i++) {
t.push(Number(document.getElementById("f" + n + "_" + i).value));
}
document.getElementById("f" + n + "_4").value = (t[0] * t[1]) + t[2];
}
[/code]
아 무조건 덧셈인 줄 알았네요.
저렇게 바꾸시면 됩니다.
2016-10-10 (월) 13:37:06
원하는 대로 잘됩니다,,정말 간결하게 되었군요,,
염치없지만
<INPUT id=f1_4 name=total>
이부분들의 총계 all_total이 나오게 하는거 좀 부탁드려볼 수 있을까요,,
제 실력으로는 어려워서요,,,
document.getElementsByName("all_total")[0].value = Number(document.getElementsByName("total")[0].value) + Number(document.getElementsByName("total")[1].value);
이거 함수 안에 추가하시고

<input type="text" name="all_total">
이건 제일 하단에 추가
2016-10-10 (월) 14:02:39
진심으로 감사드려요!!
잘됩니다. 감사합니다.
좋은 하루 되세요,,
복받으실거에요~
감사합니다.
Copy
<script language='javascript'> function sum(num){     var f1_1 = document.getElementById('f'+num+'_1');     var f1_2 = document.getElementById('f'+num+'_2');     var f1_3 = document.getElementById('f'+num+'_3');     var f1_4 = document.getElementById('f'+num+'_4');      f1_4.value = Number(f1_1.value)*Number(f1_2.value)+Number(f1_3.value);      var total.value = 0;    $('.total').each(function() {        total.value += Number($(this).val());    });} </script>  <INPUT  id=f1_1 onkeyup="sum(1);"><INPUT  id=f1_2 onkeyup="sum(1);"> <INPUT  id=f1_3 onkeyup="sum(1);"> <INPUT  id=f1_4 class="total" clase=total c><br> <INPUT  id=f2_1 onkeyup="sum(2);"><INPUT  id=f2_2 onkeyup="sum(2);"> <INPUT  id=f2_3 onkeyup="sum(2);"> <INPUT  id=f2_4 class="total" clase=total></script>   <INPUT  id=f1_1 onkeyup="sum(1);"> <INPUT  id=f1_2 onkeyup="sum(1);"> <INPUT  id=f1_3 onkeyup="sum(1);"> <INPUT  id=f1_4 clase=total><br> <INPUT  id=f2_1 onkeyup="sum(2);"> <INPUT  id=f2_2 onkeyup="sum(2);"> <INPUT  id=f2_3 onkeyup="sum(2);"> <INPUT  id=f2_4 clase=total>

답변에 대한 댓글 1개

2016-10-10 (월) 11:58:40
존경스럽습니다~ 감사합니다.
그런데 뭔가 잘못이 있는지 안되네요,,,

앞에 f1부터 f20까지를 변수로 받아 처리하면 되지 않을까 싶습니다.

일일이 다 변수를 입력받아 처리하려면 코드가 길어질수 밖에 없는거라서요

일단 다 반영하고 submit 할때 total 변수를 한번에 적용해 주게 되면 할때마다 계산해 주면 되지 않을까 합니다.

일일이 total의 합산값을 보여줄 필요가 없다면요

답변에 대한 댓글 1개

2016-10-10 (월) 12:01:01
답변 감사합니다~

답변을 작성하려면 로그인이 필요합니다.