返回undefined的input元素上的document.getElementById

时间:2011-08-04 08:53:41

标签: javascript input undefined getelementbyid

我正在创建一个在多个页面上分割的quizz quid,我尝试使用javascript的get方法将每个问题的分数传递到下一页。

我使用一个名为gValue()的函数来获取url中上一页的变量(称为“s”+页面编号),然后我想添加这个变量(我称之为'得分')到下一页的3个多项选择答案的值,并反复复制整个过程。

我将新闻核心插入每个无线电输入字段的值时遇到问题。

我没有得到任何控制台错误,也没有javascript错误,但是当我想检查新值是否以正确的方式添加到表单中的每个输入元素时,我得到"undefined"。 这是我的第一页的代码,然后是第二页的代码,我想看到插入到表单中的新值:

首页发送s1变量:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
        <meta name="robots" content="index, follow" />
        <meta name="googlebot" content="index, follow" />
    </head>
    <body>
        <div>Choose between<br />
            <form name="fo" method="get" action="part1.html">
                <input type="radio" name="s1" value="1" />one<br />
                <input type="radio" name="s1" value="2" />two<br />
                <input type="radio" name="s1" value="3" />three<br />
                <input type="submit" value="continuer" />
            </form>
        </div>
    </body>
</html>

第二页,我要提取s1的值并将其添加到表单中3个输入的值中:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
        <meta name="robots" content="index, follow" />
        <meta name="googlebot" content="index, follow" />
        <script type="text/javascript">
            <!--
            function subnewsc() {
                for (i = 1; i <= 3; i++) {
                    var score = gValue();
                    score = parseInt(score);
                    i = parseInt(i);
                    var newscore = score + i;
                    var doc = 'document.getElementById("a' + i + '")';
                    doc.value = newscore;
                }
            }


            function gValue() {
                var url = window.location.href;
                var qparts = url.split("?");

                if (qparts.length == 0) {
                    return "";
                }

                var query = qparts[1];
                var vars = query.split("&");
                var value = "";

                for (var i = 0; i < vars.length; i++) {
                    var parts = vars[i].split("=");
                    for (var f = 1; f <= 3; f++) {
                        var ss = "s" + f;
                        if (parts[0] == ss) {
                            value = parts[1];
                            break;
                        }
                    }
                }
                return value;
            }
            // -->
        </script>
    </head>
    <body>
        <div>choose between<br />
            <form name="fo" method="get" action="part2.html">
                <input id="a1" type="radio" name="s2" value="1" />one again<br />
                <input id="a2" type="radio" name="s2" value="2" />two again<br />
                <input id="a3" type="radio" name="s2" value="3" />three again<br />
                <input type="submit" value="continuer" />
            </form>
            <script type="text/javascript">
                <!--
                var boby = subnewsc();
                document.write(boby);
                //-->
            </script>
        </div>
    </body>
</html> 

当我使用“boby”变量检查时,我不知道为什么会得到undefined。我首先想到的是,由于DOM,函数subnewsc()被调用得太早,所以元素还没有出现,但不应该是这样,因为我现在称之为。

它似乎与document.getElementById中的id名称的性质无关,因为它应该是一个字符串(一个字符串加上一个数字变成一个字符串)

2 个答案:

答案 0 :(得分:0)

也许

var doc = document.getElementById("a'+ i +'");

没有单引号

答案 1 :(得分:0)

javascript可能有点时髦 - 代码中的空格只会导致此错误,这里是我所展示的一个例子,这是我写的脚本:

<select id="mySelect" multiple="multiple"> <option>Apple</option>

当我运行此javascript并试图找到第一个孩子时,收到错误消息,指出“未定义” 但是,我从以下行中删除了空格并修复了它:

<select id="mySelect" multiple="multiple"><option>Apple</option>

请注意我如何删除多个选项

之间的空格