0

这是我的 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总是返回未定义。为什么会发生这种情况。请帮我。谢谢!

4

3 回答 3

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"]
于 2012-04-23T21:18:09.023 回答
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>

与您的代码有什么不同吗?警报调用显示值。

于 2012-04-23T21:19:37.607 回答
-1

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

所以我会尝试看看网络上的任何答案是否会有所帮助。唉,没有任何效果。

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

于 2012-06-20T20:50:28.047 回答