document.getElementById для элемента ввода, возвращающего неопределенное - PullRequest
0 голосов
/ 04 августа 2011

Я создаю тест, разбитый на несколько страниц, и пытаюсь передать оценку каждого вопроса на следующую страницу, используя метод get с javascript.

Я использую функцию с именем gValue(), чтобы получить переменные с предыдущей страницы (называемые «s» + номер страницы) в URL, а затем я хочу добавить эту переменную (которую я называю «оценка») ) к значениям трех вариантов ответа на следующей странице и повторять весь процесс снова и снова.

У меня проблема с вставкой newscore в значения каждого из полей радиовхода.

Я не получаю ни консольной ошибки, ни ошибки 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> 

Я не знаю, почему я получаю undefined, когда я проверяю, используя переменную "boby". Сначала я подумал, что это из-за DOM, что функция subnewsc() была вызвана слишком рано, так что элементов еще не было, но это не должно быть так, как я сейчас ее называю.

Кажется, это также не связано с природой имени идентификатора в document.getElementById, поскольку оно должно быть строкой (строка плюс число, становящееся строкой)

Ответы [ 2 ]

0 голосов
/ 11 февраля 2013

javascript может быть немного забавным - простые пробелы в коде могут вызвать эту ошибку, вот пример того, что я испытал, вот скрипт, который я написал:

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

, когда я запускал этот javascript ипопытался найти firstchild, получил сообщение об ошибке "undefined". Однако я удалил пробел из следующей строки и исправил это:

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

обратите внимание, как я удалил пробел между множеством и параметром

0 голосов
/ 04 августа 2011

возможно

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

без одинарных кавычек

...