3

ユーザーからいくつかの音節を取得し、それらからランダムに単語を作成する単純なジェネレーターを作成しようとしています。

素敵な入力システムを作ることができました。音節を 2D 配列に配置します。私はそれをテストしましたが、動作します。

配列のランダムな部分を警告しようとすると、「Uncaught TypeError: Undefined のプロパティ '0' を読み取れません」と叫びます。

<html>
<head>
    <script type = "text/javascript">
        var sounds = [[],[],[]];

        function makeName(x){
            alert(x[0][random(x[0].length)] + x[1][random(x[1].length)] + x[2][random(x[2].length)]); //Something is wrong here
        }

        function random(x){ //Random number between 0 and x-1
            return Math.floor(Math.random()*x); //The problem might be here too
        }

        var Count0 = 0;
        var Count1 = 0;
        var Count2 = 0;

        function add(type, fooNum) {

            //Create an input type
            var element = document.createElement("input");

            //Add to index of user supplied data
            if(fooNum == 1){
                Count0++;
                element.setAttribute("id","0:" + Count0);
            }else if(fooNum == 2){
                Count1++;
                element.setAttribute("id","1:" + Count1);
            }else if(fooNum == 3){
                Count2++;
                element.setAttribute("id","2:" + Count2);
            }else{
                alert("Somethin' went wrong, man!");
            }

            console.log(element.id);

            //Assign different attributes to the element.
            element.setAttribute("type", type);
            element.setAttribute("value", "");
            var foo = document.getElementById("fooBar"+fooNum);

            //Append the element in page (in <span>).
            foo.appendChild(element);

        }

        function generate(){ //Assign the inputs to a 2D array
            var counts = [Count0, Count1, Count2];
            hello=counts;
            for(k=0; k<=2; k++){
                for(i=0; i<=counts[k]; i++){
                        sounds[k][i] = document.getElementById(k + ":" + i).value;
                        alert(sounds[k][i]);
                }
                i = 0;
            }
        }

    </script>
</head>
<body>
    <FORM>

        <INPUT type="button" value="Add" onclick="add(document.forms[0].element.value, 1)"/><INPUT type="text" name="element" id="0:0"/><span id="fooBar1">&nbsp;</span><P>
        <INPUT type="button" value="Add" onclick="add(document.forms[0].element.value, 2)"/><INPUT type="text" name="element" id="1:0"/><span id="fooBar2">&nbsp;</span><P>
        <INPUT type="button" value="Add" onclick="add(document.forms[0].element.value, 3)"/><INPUT type="text" name="element" id="2:0"/><span id="fooBar3">&nbsp;</span><P>

        <INPUT type="button" value="Generate" onclick="generate()"/><P>
        <INPUT type="button" value="Make Name" onclick="makeName()"/><P>
    </FORM>
</body>

私の推測では、問題は random() または makeName() にあります。

助けてください!前もって感謝します。

4

2 に答える 2

3

あなたのmakeName関数は引数を取りますx:

 function makeName(x) {

しかし、あなたはそれを次のように呼びます:

<INPUT type="button" value="Make Name" onclick="makeName()"/>

そのため、xでは定義されていませんmakeName

于 2012-06-17T01:50:19.123 に答える
1

あなたのhtmlでは、makeName引数なしで関数を呼び出しました

<INPUT type="button" value="Make Name" onclick="makeName()"/><P>

しかし、あなたの関数には引数が必要です

function makeName(x){
    alert(x[0][random(x[0].length)] + x[1][random(x[1].length)] + x[2][random(x[2].length)]);
}

あなたの関数xでは未定義です。makeName

于 2012-06-17T01:51:26.453 に答える