2013-07-12 3 views
0

저는 많은 형태를 mysql 데이터베이스에 추가하기 위해 루프를 사용할 프로젝트를 만들고 있습니다. 자바 스크립트 섹션에서 나는 함수 updateum() 내부에서 작동하도록 var를 가져올 수 없습니다. 누군가 나를 도울 수 있습니까?자바 스크립트/양식

나는이 작업을 수행하는 데 aviod에 노력 해요 :

document.form1.total.value = (document.form1.number1.value -0) + (document.form1.number2.value -0); 
document.form2.total.value = (document.form2.number1.value -0) + (document.form2.number2.value -0); 
........... 
document.form48.total.value = (document.form48.number1.value -0) + (document.form48.number2.value -0); 
document.form49.total.value = (document.form49.number1.value -0) + (document.form49.number2.value -0); 

자리를 차지할 것입니다 약 12 ​​다른 계산이있을 것입니다.

도움을 주시면 감사하겠습니다.

<html> 
<head> 
<script type="text/javascript"><!-- 
function updatesum() { 

for(var i=0; i < 50; i++) 
     { 
    document.form[i].total.value = (document.form[i].number1.value -0) + (document.form[i].number2.value -0); 
      } 
     } 
    //--> 
</script> 
</head> 

<body> 
<table border="1"> 
    <tr> 
     <td>#</td> 
     <td>NUMBER</td> 
    </tr> 
<? 
$x=1; 



while($x <= 50) 
    { ?> 
     <tr> 
      <td> 
       <? echo $x; ?> 
      </td> 
      <td> 
       <form name="form<? echo $x;?>" > 
        <table border="1"> 
         <tr> 
          <td>NUMBER1</td> 
          <td>NUMBER2</td> 
          <td>TOTAL</td> 
         </tr> 
         <tr> 
          <td><input name="number1" size="2" onChange="updatesum()" /></td> 
          <td><input name="number2" size="2" onChange="updatesum()" /></td> 
          <td><input name="total" size="3" readonly style="border:0px;"></td> 
         </tr> 
        </table> 
       </form> 
      </td> 
     </tr> 

    <? $x++; } ?> 
</table> 



</body> 
</html> 
+0

같은 이름을 가진 49 개의 함수를 만들면 ... 그리고 루프에 함수가있는 이유는 무엇입니까? – ryanc1256

+1

^^^^ 실제로 OP는 첫 번째 함수를 하나만 작성하므로 처음 48 개를 덮어 씁니다. 마지막으로? – adeneo

+0

나는 그것들을 49 개로 만들 것이라고 생각했지만 단 하나는 작동 할 것이지만 ... 지적 해 주셔서 감사합니다. – ryanc1256

답변

0

루프 내부에서 함수를 정의하고 있습니다. 이것은 함수 호출/호출과는 다릅니다.

당신은 그런 형태의 내부 기능을 가질 수 없습니다

<script type="text/javascript"><!-- 

function updatesum() { 
    document.form[i].total.value = (document.form[i].number1.value -0) + (document.form[i].number2.value -0); 
} 

for(var i=0; i < 50; i++) { 
    updatesum(); 
} 

//--> 
</script> 
+0

이 작동하지 않는 것 같지만 회신 해 주셔서 감사합니다. – user2578177

0

을보십시오. 나는 루프 외부 함수를 정의하고 루프 내부를 호출 제안 :

Demo here

function updatesum() { 
    var forms = document.getElementsByTagName("form"); 
    for (var v = 0; v < 50; v++) { 
     var input = forms[v].getElementsByTagName("input"); 
     input[2].value = eval(input[0].value) + eval(input[1].value); 
    } 
} 

우리가 더 당신을 도울 수있는 당신이 그 코드를 원하는 설명합니다. 귀하의 html에서 함수를 호출하고 나는 당신이 기대하는 것을 예측할 수 없습니다 ...

+0

이 작업을 피하려고합니다. function updatedum() { document.form1.total.value = (document.form1.number1.value -0) + (document .form1.number2.value -0); document.form2.total.value = (document.form2.number1.value -0) + (document.form2.number2.value -0); document.form3.total.value = (document.form3.number1.value -0) + (document.form3.number2.value -0); document.form4.total.value = (document.form4.number1.value -0) + (document.form4.number2.value -0); } – user2578177

+0

형태의 var $ x는 최대 60 일 수 있으며 약 12 ​​개의 서로 다른 계산이 있습니다. 각 답변마다 $ x – user2578177

+0

@ user2578177을 만들려고합니다. 라이브 데모도 확인하십시오. – Sergio

0

루프를 실행할 때마다 함수가 정의됩니다. 당신이하고 싶은 것은 먼저 루프 외부에서 함수를 정의하는 것입니다. 그런 다음 각 루프 반복과 함께 호출하십시오. 또한 함수에 인덱스 (즉, .i)를 전달하려고합니다. 이처럼

:

<script type="text/javascript"> 

    function updatesum(i) { 
     document.form[i].total.value = (document.form[i].number1.value -0) + (document.form[i].number2.value -0); 
    } 

    for(var i=0; i < 50; i++) { 
      updatesum(i); 
    } 

</script> 

은 우리가 당신을 위해 어떻게 작동하는지 알려주십시오.