首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getElementsByName返回未定义

getElementsByName返回未定义
EN

Stack Overflow用户
提问于 2012-04-24 05:01:18
回答 3查看 4.2K关注 0票数 0

这是我的javascript:

代码语言: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的一部分:

代码语言:javascript
复制
<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。为什么会发生这种情况。请帮帮我。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-24 05:18:09

你的错误在于:

代码语言:javascript
复制
if (radio[x].checked) {
    answrs = radio.value;
}

answrs是一个数组,需要将值设置为它所在的相应迭代器的索引。radio.value试图访问radio数组中的值,但也遗漏了它的索引。看看我下面的解决方案来解决问题:

我有一个jsFiddle在工作。

JavaScript:

代码语言: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时,数组为:

代码语言:javascript
复制
["1", "2", "3", "4", "3", "2", "1", "2", "3", "4"]
票数 3
EN

Stack Overflow用户

发布于 2012-04-24 05:19:38

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

代码语言:javascript
复制
<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>

与你的代码有什么不同吗?警报呼叫显示值。

票数 0
EN

Stack Overflow用户

发布于 2012-06-21 04:50:28

有时我会得到一个分配给document.getElementsByName(name)的未定义的var。

所以我会试着看看网络上的答案会不会有帮助。遗憾的是,这一切都不管用。

所以我继续测试我认为我应该得到的数组。元素就在那里。因此,只需忽略“未定义”并继续使用var。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10288247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档