アプリ版:「スタンプのみでお礼する」機能のリリースについて

ラジオボタンで選択されている値が等しいか判定し、出力はalert()で出力する関数を定義する。
HTML 側でラジオボタンが選択されていない場合は、「ラジオボタン未選択エラー」を alert()で出力する。
書きました。上手くいきませんなんでなのでしょう 以下のコードです。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
function Kuji(name)
{
var flag = false;
var radios = document.getElementsByName(name);
var random = Math.floor(Math.random() * radios.length);

var result = "";
for(var i = 0; i < radios.length; i++)
{
if(radios[i].cheked)
{

result = radios[i].value;
}
}

if(result == random)
{
alert("当たり\n正解:"+random);
}
else
{
alert("外れ\n正解:"+random);
}


{
alert("ラジオボタン未選択エラー");
}
}
</script>
</head>
<body>
<form name = "fm">
<input type = "radio" name = "grp" value = "0"> 0
<input type = "radio" name = "grp" value = "1"> 1
<input type = "radio" name = "grp" value = "2"> 2
<input type="button" value ="選択結果" onclick="Kuji('grp')">
</form>
</body>
</html>

A 回答 (1件)

こんにちは



>上手くいきませんなんでなのでしょう
原因は、質問者様がお考えの内容とは異なるスクリプトになっているからでしょう。


主に、以下の2点を見直してみてください。

>if(radios[i].cheked)
チェック状態を取得したいのなら、cheked ではなく、checked では?
ループを抜けたところで、
 alert("result=" + result);
などを入れてみれば、正しく取得できているかを確認できると思います。

ちなみに、選択要素のインデックスを取得するのでもよければ、
 const result = [...radios].findIndex(e => e.checked);
の一文でも可能です。(未選択の場合は -1 が返ります)
(上記はvalue値ではなく、インデックスを取得しています。)


表示内容の判断部分の処理を簡略化すると、
>if(result == random){①}
>else {②}
>{③}
のような構成になっていますが、上記を言葉で表すと
「result と randomが一致すれば①、そうでなければ②を実行。その後で③を実行」
となります。
多分、意図するところと違いますよね?
未選択の場合も場合分けに含めておく必要があると思われます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!