javascript 未定义错误 - 从表单获取值

javascript undefined error - getting a value from a form

我是初学者!我开始研究javascript,但是有个错误我找不到解决方法。

Uncaught TypeError: Cannot read property 'value' of undefined at correct (homework.jsp:50) at HTMLInputElement.onclick (homework.jsp:63)

当我按下 'done' 按钮时会发生这种情况。我想从表单中获取值。但该值始终为 'undefined',我无法将其更改为数字或字符串。也许我未能获得价值。你能帮帮我吗?

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h2>Homework</h2>
<form name="gugu">
<script type="text/javascript">
    //How many questions?
    var size=eval(window.prompt("How many questions?"));
    var a=new Array(size);
    var b=new Array(size);
    var ans=new Array(size);
    var rst=new Array(size);
    var count=0;

    //Start
    gugugu();
    function gugugu() {
        document.write("<table border='1'>");
        for (var i=0; i<size+1; i++) {
            if(i<size) {
                document.write("<tr>");
                document.write("<td>");
                    a[i]=parseInt(Math.random()*9)+1;
                    b[i]=parseInt(Math.random()*9)+1;
                    rst[i]=a[i]*b[i];
                    document.write(a[i]+"*"+b[i]+"=");
                document.write("</td>");
                document.write("<td>");
                    //I can't get the value!
                    var str="<input type='text' name='"+i+"'>";
                    document.write(str);
                document.write("</td>");
                document.write("</tr>");
            } else {
                document.write("<tr>");
                document.write("<td colspan='2' align='center'>");
                    document.write("<input type='button' value='done' onclick='correct()'>");
                    document.write("<input type='button' value='reset' onclick='reset()'>");
                document.write("</td>");
                document.write("</tr>");
            }
        }
        document.write("</table>");
        document.write("count : ");
        document.write("<input type='text' value='' name='count' readonly>");
        document.write("<br>");
        document.write("note : ");
        document.write("<input type='text' value='' name='note' readonly>");
    }
    function correct() {
        for (var i=0; i<size;i++) {
            //Here I tried putting values into an Array, but 'undefined' happens!
            ans[i]=String(document.gugu.i.value);
            document.write(typeof(ans[i])+","+rst[i]+"<br>");
            if(ans[i]==rst[i]) {
                count=count+1;
            }
        }
        document.gugu.count.value=eval(count);
        document.gugu.note.value=eval(count*10);
    }
    function reset() {
        clear();
        gugugu();
    }
</script>
</form>

我认为您不能像这样 document.something 访问 html 个元素。检查 this 以查看使用 JavaScript.

访问 html 元素的不同方式

"gugu"它的形式名称,document.gugu是未定义的,因为它不是一个全局变量,得到形式:document.getElementsByName("gugu");

ans[i]=String(document.gugu.i.value);

然后在获取表单后(在 HTMLElement[] 类型中),您正在尝试获取一行?,您不能这样做 FORM.i,"i" 此处没有上下文,从数组ans[],这样你就可以通过他们的名字(你设置为名字的数字)从输入中获取值:

ans[i] = String(document.getElementsByName("" + i)[0].values[i]);

所以在这里和那里做一些改变就可以了:

<h2>Homework</h2>
<form name="gugu">
<script type="text/javascript">
    //How many questions?
    var size = eval(window.prompt("How many questions?"));
    var a = new Array(size);
    var b = new Array(size);
    var ans = new Array(size);
    var rst = new Array(size);
    var count = 0;

    //Start
    gugugu();
    function gugugu() {
        document.write("<table border='1'>");
        for (var i = 0; i < size + 1; i++) {
            if (i < size) {
                document.write("<tr>");
                document.write("<td>");
                a[i] = parseInt(Math.random() * 9) + 1;
                b[i] = parseInt(Math.random() * 9) + 1;
                rst[i] = a[i] * b[i];
                document.write(a[i] + "*" + b[i] + "=");
                document.write("</td>");
                document.write("<td>");
                var str = "<input type='text' name='in" + i + "'>";
                document.write(str);
                document.write("</td>");
                document.write("</tr>");
            } else {
                document.write("<tr>");
                document.write("<td colspan='2' align='center'>");
                document.write("<input type='button' value='done' onclick='correct()'>");
                document.write("<input type='button' value='reset' onclick='reset()'>");
                document.write("</td>");
                document.write("</tr>");
            }
        }
        document.write("</table>");
        document.write("count : ");
        document.write("<input type='text' value='' name='count' readonly>");
        document.write("<br>");
        document.write("note : ");
        document.write("<input type='text' value='' name='note' readonly>");
    }
    function correct() {
        console.log("correct");
        for (var i = 0; i < size; i++) {
            ans[i] = parseInt(document.getElementsByName("in" + i)[0].value);
            console.log(ans[i]);
            console.log(rst[i]);
            if (ans[i] === rst[i]) {
                count = count + 1;
            }
        }
        console.log(count);

        document.getElementsByName("count")[0].value = count;
        document.getElementsByName("note")[0].value = (count * 10);
    }
    function reset() {
        clear();
        gugugu();
    }
</script>
</form>