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>

divテーブル付きの同じパターンタグが10個あり、inputそれに応じて名前が変更されています。 check_ans()で実行されonclickます。しかし、常にgetElementsByName未定義を返します。なぜこれが起こるのか。私を助けてください。ありがとう!

4

3 に答える 3

3

あなたのエラーは次のとおりです。

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

answrsは配列であり、対応するイテレータのインデックスに値を設定する必要があります。 radio.valueradio配列から値にアクセスしようとしていますが、インデックスも省略しています。修正については、以下の私の解決策を見てください。


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

に未定義の変数が割り当てられることがありdocument.getElementsByName(name)ます。

だから私はウェブからの回答が役立つかどうかを確認しようとしました。残念ながら、何も機能しませんでした。

そこで、先に進んで、取得する必要があると思ったアレイをテストしました。そして要素はそこにありました。したがって、「未定義」を無視して、変数の操作を続行してください。

于 2012-06-20T20:50:28.047 に答える