-1

私は2つの関数を持っています.1つは入力フィールドを持つテーブルを動的に作成し、その次元はユーザーによって挿入された変数kに基づいており、もう1つはテーブルのすべてのフィールドにユーザーによって再度挿入された値を読み取って挿入しますそれらを後で呼び出すことができる 2 次元配列にします。問題は、コードに挿入された onBlur で create table 関数が機能しないことです。コードは次のとおりです。

<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>
4

3 に答える 3

1

コードは正常に機能します。コメントでjbabeyが説明しているように、15行目の構文エラーを修正してください。

于 2012-05-14T13:19:15.953 に答える
1

onblur="genArray()"代わりに試してくださいonBlur="genArray()"

すべて小文字であることに注意してください!

于 2012-05-14T12:38:41.587 に答える
1

アラートの構文エラーを修正すると、genTable() が機能します。しかし、コードに論理的な問題があります。生成されたテーブル セルのすべてのテキスト フィールドに onblur イベント ハンドラを追加します。したがって、すべてのセル入力は、テーブル全体を反復する onblur イベント ハンドラーへの呼び出しをトリガーします。これはあなたが望むものではないと思います。さらに、反復中に、parseFloat 関数はすべての空のセルで失敗します。おそらくボタンを使用して、genArray() への呼び出しを 1 回だけトリガーする必要があります。

于 2012-05-14T14:14:25.677 に答える