0

mysql データベースからデータを取得し、結果をラジオ ボタンとして表示するクイズを開発しています。ラジオ ボタンは、key=>value に基づいて入力され、単純な forloop を介して生成されます。これは何度も行われており、単純な Google 検索と調査によって、これを達成するために必要なすべての結果が得られます。私が抱えている、または抱えていた問題 (jquery でこれを行うことを決定する前) は、フォームを送信すると、ボタンが選択されているかどうかを検証するために JavaScript 関数が実行されますが、他のオプションを選択すると最初のラジオ ボタンよりも、ボタンを選択しなかった場合と同じ「選択を行う」というアラートが表示されます。最初のラジオ ボタンを選択すると、true が返され、getCheckedValue 関数呼び出しが実行されます。まるで、スクリプトは、入力タイプが 1 つだけであることを認識し、残りのボタンを反復処理することを理解していません。私はこの関数を何十回もリファクタリングしましたが、なぜこれが機能しないのかまだわかりません。

<?php
    foreach ($dataReturn as $j => $value){
       echo "<input type='radio' class='answer' id='radiobtn' name='radiobtn' value='".$j."'>" .$value." </input><br/>";
    }
?>

上記は、ラジオ ボタンを生成するループです (参考までに、$dataReturn は、シャッフルされた連想配列の戻り値です。(これは意図したとおりに機能しています) 送信ボタンがクリックされると、以下の JavaScript 関数が呼び出されます。

    function isNull(){
    var isChecked = false;
    var radiobutton = document.getElementsByName('radiobtn');
    for (var i=0; i <= radiobutton.length; i++){
        if (radiobutton[i].checked){
            return true;
            var answer = radiobutton[i].value;
            getCheckedValue(answer);//using this just for testing selected value
        }else { 
        alert("Make a selection.");
        }
    return false;
    }
}

これが機能しない理由がわかりません。上記のように、jquery を使用すると、これは完全に機能します。

4

2 に答える 2

0

以下のコードを試してください。forループが終了するまで、アラートを起動したりfalseを返したりすることは望ましくありません。

 function isNull(){
    var isChecked = false;
    var radiobutton = document.getElementsByName('radiobtn');
    for (var i=0; i <= radiobutton.length; i++){
        if (radiobutton[i].checked){
            var answer = radiobutton[i].value;
            getCheckedValue(answer);//using this just for testing selected value
            return true;
        }
    }
    alert("Make a selection.");
    return false;
}

また、PHPコードはすべてのラジオボタンに同じIDを与えます。それは悪いことです。そうすることはw3c標準に違反します。

于 2012-12-21T19:07:51.413 に答える
0
  1. あなたの FOR ループ: JS はゼロから始まる配列を使用するため、<=を使用することはできません。代わりに<を使用してください。
  2. 管理を容易にするために、フィールドがループの外でチェックされたかどうかの検証を移動しました。この方法は、途中でループが抜け出すことを心配するよりもクリーンです。

ここ:

function isNull() {
    var isChecked = false;
    var radiobutton = document.getElementsByName('radiobtn');
    for (var i=0; i < radiobutton.length; i++) {
        if (radiobutton[i].checked) {
            isChecked = true;
        }
    }

    if ( !isChecked ) {
        alert("Make a selection.");
        return false;
    }
}

フォームタグがどのように見えるかわかりませんが、ラジオフィールドがチェックされていない場合にフォームが送信されないようにするために必要なものは次のとおりです。

<form action="" method="post" onSubmit="return isNull();">
于 2012-12-21T20:12:32.747 に答える