繁体   English   中英

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

[英]javascript undefined error - getting a value from a form

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

未捕获到的TypeError:无法在HTMLInputElement.onclick(homework.jsp:63)的正确位置(homework.jsp:50)读取未定义的属性“值”

当我按下“完成”按钮时,就会发生这种情况。 我想从表单中获取价值。 但是该值始终是“未定义的”,我无法将其更改为Number或String。 也许我未能获得价值。 你能帮我吗?

<%@ 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元素。 选中此选项可查看使用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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM