getElementsByName返回undefined

时间:2012-04-23 21:01:18

标签: javascript html

这是我的javascript:

<script type="text/javascript">
    var crct_answrs = new Array(<?php echo implode(',', $crct_ans); ?>);
    var answrs = new Array();

    function check_ans(){
        for(var i = 1; i < 11; i++){
            var tst = "ques"+i;
            var radio = document.getElementsByName(tst);
            for (var x = 0; x < radio.length; x ++) {
                if (radio[x].checked) {
                    answrs = radio.value;
                }   
            }
        }       
    }   
</script>

这是HTML的一部分:

<form>
            <div id="quest1" class="question">
                <div class="prblm">
                    <?php echo $questions[1]; ?></div>
                <table class="answrs">
                    <tr>
                        <td><?php echo $answrs[1][1]; ?></td>
                        <td><input name="ques1" type="radio" value="1"></td>
                    </tr>
                    <tr>
                        <td><?php echo $answrs[1][2]; ?></td>
                        <td><input name="ques1" type="radio" value="2"></td>
                    </tr>
                    <tr>
                        <td><?php echo $answrs[1][3]; ?></td>
                        <td><input name="ques1" type="radio" value="3"></td>
                    </tr>
                    <tr>
                        <td><?php echo $answrs[1][4]; ?></td>
                        <td><input name="ques1" type="radio" value="4"></td>
                    </tr>
                </table>
            </div>

我有10个相同的模式div标签和表格,input名称也相应更改。 check_ans()onclick上运行。但始终getElementsByName返回undefined。为什么会这样。请帮我。谢谢!

3 个答案:

答案 0 :(得分:3)

您的错误在于:

if (radio[x].checked) {
    answrs = radio.value;
}

answrs是一个数组,需要将值设置为它所在的相应迭代器的索引。 radio.value正在尝试从radio数组中访问值,但也忽略了它的索引。请查看下面的解决方案:


我有一个jsFiddle工作。

<强> JavaScript的:

var answrs = [];

function check_ans() {
    for (var i = 1; i <= 10; i++) {
        var radio = document.getElementsByName("ques" + i);
        for (var x = 0; x < radio.length; x++) {
            if (radio[x].checked) {
                answrs[i-1] = radio[x].value;
            }
        }
    }
    console.log(answrs);
}​

<强>输出:

为问题1-10选择答案1,2,3,4,3,2,1,2,3,4时,阵列为:

["1", "2", "3", "4", "3", "2", "1", "2", "3", "4"]

答案 1 :(得分:0)

嗯。这对我有用(我删除了一些PHP代码)

<html>
<head>
<script type="text/javascript">
    var crct_answrs = new Array();
    var answrs = new Array();

    function check_ans(){

        for(var i = 1; i < 11; i++){
            var tst = "ques"+i;

            var radio = document.getElementsByName(tst);
            alert(radio);
            for (var x = 0; x < radio.length; x ++) {
                if (radio[x].checked) {
                    answrs = radio.value;
                }   
            }
        }       
    }   
</script>
</head>
<body>
<button type="button" onclick="check_ans();">test</button>
            <div id="quest1" class="question">
                <div class="prblm">
                    <?php echo $questions[1]; ?></div>
                <table class="answrs">
                    <tr>
                        <td><?php echo $answrs[1][1]; ?></td>
                        <td><input name="ques1" type="radio" value="1"></td>
                    </tr>
                    <tr>
                        <td><?php echo $answrs[1][2]; ?></td>
                        <td><input name="ques1" type="radio" value="2"></td>
                    </tr>
                    <tr>
                        <td><?php echo $answrs[1][3]; ?></td>
                        <td><input name="ques1" type="radio" value="3"></td>
                    </tr>
                    <tr>
                        <td><?php echo $answrs[1][4]; ?></td>
                        <td><input name="ques1" type="radio" value="4"></td>
                    </tr>
                </table>
            </div>

<body/>
</html>

与您的代码存在任何差异?警报呼叫显示值。

答案 2 :(得分:-1)

我有时会将未定义的var分配给document.getElementsByName(name)

所以我会试着看看网上的任何答案是否有帮助。唉,没什么用。

所以我继续测试了我认为应该得到的阵列。那里的元素。所以只需忽略'undefined'并继续使用var。