2012-05-14 2 views
-1

저는 사용자가 삽입 한 변수 k를 기반으로하는 입력 필드가있는 테이블을 동적으로 생성하는 함수와 사용자가 삽입 한 값을 다시 동적으로 생성하는 함수가 있습니다. 사용자를 테이블의 모든 필드에 추가하고 나중에 호출 할 수있는 2 차원 배열에 삽입합니다. 문제는 create table 함수가 코드에 삽입 된 onBlur와 작동하지 않는다는 것입니다. 코드는 다음과 같다 :innerHtml의 onBlur가 함수를 차단합니다.

<head> 
    <script> 
     var k; 


      function genArray() { 
       var A = []; 
        for (var i = 0; i < k; i++) { 
         A[i] = []; 
         for (var j = 0; j < k; j++) { 
          var id = "A" + (i + 1) + (j + 1); 
          A[i][j] = parseFloat(document.getElementById(id).value); 
if (isNaN (A[i][j])) { 
          alert ('Valoarea 'A[i][j]' nu este un numar. Reintroduceti valoarea'); 
} 
         } 
        }      
      } 

      function readGrad() {    
       k = parseInt(document.getElementById("grad").value);    
       if (isNaN(k)) { 
        alert('Gradul introdus nu este intreg, reintroduceti gradul matricii'); 
       } 
       if (k == 0) { 
        alert ('Determinantul trebuie sa fie mai mare ca 1'); 
       } 
       if (k == 1) { 
        alert ('Determinantul trebuie sa fie mai mare ca 1'); 
       } 
       return k; 
      }  

      function genTable(i,j) {    
       //var i,j = parseInt(document.getElementById("grad").value); 
       var myTable = '<TABLE BORDER="1" BORDERCOLOR="BLACK">\n <TBODY>\n'; 
       for (i = 0; i < 1; i++) { 
        myTable += ' <TR>\n'; 
        for (j = 0; j < k+1; j++) { 
         myTable += ' <TD>'+j+'</TD>\n'; 
        } 
        myTable += ' </TR>\n'; 
       } 
       for (i = 1; i < k+1; i++) { 
        myTable += ' <TR>\n'; 
        for (j = 0; j < 1; j++) { 
         myTable += ' <TD>'+i+'</TD>\n'; 
        } 
        for (j = 1; j < k+1; j++) { 
        myTable += ' <TD><input class="element" id="A' + i + j + '" onblur="genArray()"></TD>\n'; 
        } 
        myTable += ' </TR>\n'; 
       } 
       myTable += ' </TBODY>\n</TABLE>\n'; 
       document.getElementById('container').innerHTML = myTable; 
      } 
    </script> 
</head> 

<body style="background-color: #777; color: ddd;"> 
    <div style="margin: 20px;"> 
     <h1>Program de calculare determinant matrice de orice grad.</h1> 
    </div> 
    <div> 
     Introduceti gradul matricei 
     <input id="grad" type="text" value="" style="width: 50px;" onChange="readGrad()">   
     <input style="margin-top: 20px;" type="button" name="Calculate determinant" value="Generati tabel" onClick="genTable()"> 
    </div> 
    <form name="Det Matrice"> 
     <div style="margin-top: 100px; float: left; width: 100%;"> 
      Introduceti valorile: 
      <table style="text-align: center;"> 
       <div id="container"></div> 
      </table> 
      <br> 
     </div> 
</body> 
+0

'k'가 보이지 않아서 MIB2처럼 보입니다. – Paul

+0

jslint는 코드의 유효성을 검사합니다. k는 사용자가 정의하고 다른 함수에서 읽습니다. onBlur = "genArray()"를 삭제하면 표가 생성됩니다. – viktor

+0

경고 중 하나에서 구문 오류가 발생했습니다. 'Valoarea'[i] [j] '...'는 'Valoarea'+ – jbabey

답변

1

경고의 구문 오류를 수정 한 후 genTable()이 작동합니다. 하지만 당신은 당신의 코드에 논리 문제가 있습니다. 생성 된 표 셀의 모든 텍스트 필드에 onblur 이벤트 핸들러를 추가합니다. 따라서 모든 셀 입력은 onblur 이벤트 핸들러를 호출하여 전체 테이블을 반복합니다. 나는 이것이 당신이 원하는 것이라고 생각하지 않습니다. 게다가, 반복하는 동안 parseFloat 함수는 모든 빈 셀에서 실패합니다. 단추를 사용하여 genArray()에 대한 호출을 한 번만 트리거해야합니다.

+0

네가 맞다. 그러나 나는 버튼없이 그것을하고 싶다. 아이디어는 값이 삽입 된 직후 모든 필드를 확인하는 것입니다. 가장 좋은 해결책은 모든 필드를 값 0으로 초기화하는 것입니다. – viktor

+0

@viktor :이 경우 전체 필드를 검사하는 대신 방금 삽입 한 필드를 확인하고 배열을 업데이트하면됩니다. – dragon66

1

는 모든 소문자에 있음을 대신 onBlur="genArray()"

공지 사항의 onblur="genArray()"을보십시오!

+0

onblur와 함께 작동하지 않는다. – viktor

+0

작동하지 않는다? 더 구체적이지 않은 이유는 무엇입니까? 너 우리가 초능력자를 괴롭 히고 있다고 생각하니? 귀하의 요청에 따라 – Amberlamps

+0

html 코드를 추가했습니다. "Generati tabel"을 클릭하면 아무 일도 일어나지 않습니다. – viktor

1

코드가 올바르게 작동합니다. 주석에서 jbabey가 설명한 것처럼 15 행의 구문 오류를 바로 잡으십시오.

관련 문제